home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / netz / amyboard / amiga / parser.c < prev    next >
C/C++ Source or Header  |  1995-08-12  |  125KB  |  3,496 lines

  1. /* A lexical scanner generated by flex */
  2.  
  3. /* Scanner skeleton version:
  4.  * $Header: /home/daffy/u0/vern/flex/flex-2.4.7/RCS/flex.skl,v 1.2 94/08/03 11:13:24 vern Exp $
  5.  */
  6.  
  7. #define FLEX_SCANNER
  8.  
  9. #include <stdio.h>
  10.  
  11.  
  12. /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
  13. #ifdef c_plusplus
  14. #ifndef __cplusplus
  15. #define __cplusplus
  16. #endif
  17. #endif
  18.  
  19.  
  20. #ifdef __cplusplus
  21.  
  22. #include <stdlib.h>
  23. #include <unistd.h>
  24.  
  25. /* Use prototypes in function declarations. */
  26. #define YY_USE_PROTOS
  27.  
  28. /* The "const" storage-class-modifier is valid. */
  29. #define YY_USE_CONST
  30.  
  31. #else    /* ! __cplusplus */
  32.  
  33. #ifdef __STDC__
  34.  
  35. #define YY_USE_PROTOS
  36. #define YY_USE_CONST
  37.  
  38. #endif    /* __STDC__ */
  39. #endif    /* ! __cplusplus */
  40.  
  41.  
  42. #ifdef __TURBOC__
  43. #define YY_USE_CONST
  44. #endif
  45.  
  46.  
  47. #ifndef YY_USE_CONST
  48. #ifndef const
  49. #define const
  50. #endif
  51. #endif
  52.  
  53.  
  54. #ifdef YY_USE_PROTOS
  55. #define YY_PROTO(proto) proto
  56. #else
  57. #define YY_PROTO(proto) ()
  58. #endif
  59.  
  60. /* Returned upon end-of-file. */
  61. #define YY_NULL 0
  62.  
  63. /* Promotes a possibly negative, possibly signed char to an unsigned
  64.  * integer for use as an array index.  If the signed char is negative,
  65.  * we want to instead treat it as an 8-bit unsigned char, hence the
  66.  * double cast.
  67.  */
  68. #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
  69.  
  70. /* Enter a start condition.  This macro really ought to take a parameter,
  71.  * but we do it the disgusting crufty way forced on us by the ()-less
  72.  * definition of BEGIN.
  73.  */
  74. #define BEGIN yy_start = 1 + 2 *
  75.  
  76. /* Translate the current start state into a value that can be later handed
  77.  * to BEGIN to return to the state.
  78.  */
  79. #define YY_START ((yy_start - 1) / 2)
  80.  
  81. /* Action number for EOF rule of a given start state. */
  82. #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
  83.  
  84. /* Special action meaning "start processing a new file".  Now included
  85.  * only for backward compatibility with previous versions of flex.
  86.  */
  87. #define YY_NEW_FILE yyrestart( yyin )
  88.  
  89. #define YY_END_OF_BUFFER_CHAR 0
  90.  
  91. /* Size of default input buffer. */
  92. #define YY_BUF_SIZE 16384
  93.  
  94. typedef struct yy_buffer_state *YY_BUFFER_STATE;
  95.  
  96. extern int yyleng;
  97. extern FILE *yyin, *yyout;
  98.  
  99. #ifdef __cplusplus
  100. extern "C" {
  101. #endif
  102.     extern int yywrap YY_PROTO(( void ));
  103. #ifdef __cplusplus
  104.     }
  105. #endif
  106.  
  107. #define EOB_ACT_CONTINUE_SCAN 0
  108. #define EOB_ACT_END_OF_FILE 1
  109. #define EOB_ACT_LAST_MATCH 2
  110.  
  111. /* The funky do-while in the following #define is used to turn the definition
  112.  * int a single C statement (which needs a semi-colon terminator).  This
  113.  * avoids problems with code like:
  114.  *
  115.  *     if ( condition_holds )
  116.  *        yyless( 5 );
  117.  *    else
  118.  *        do_something_else();
  119.  *
  120.  * Prior to using the do-while the compiler would get upset at the
  121.  * "else" because it interpreted the "if" statement as being all
  122.  * done when it reached the ';' after the yyless() call.
  123.  */
  124.  
  125. /* Return all but the first 'n' matched characters back to the input stream. */
  126.  
  127. #define yyless(n) \
  128.     do \
  129.         { \
  130.         /* Undo effects of setting up yytext. */ \
  131.         *yy_cp = yy_hold_char; \
  132.         yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
  133.         YY_DO_BEFORE_ACTION; /* set up yytext again */ \
  134.         } \
  135.     while ( 0 )
  136.  
  137. #define unput(c) yyunput( c, yytext_ptr )
  138.  
  139.  
  140. struct yy_buffer_state
  141.     {
  142.     FILE *yy_input_file;
  143.  
  144.     char *yy_ch_buf;        /* input buffer */
  145.     char *yy_buf_pos;        /* current position in input buffer */
  146.  
  147.     /* Size of input buffer in bytes, not including room for EOB
  148.      * characters.
  149.      */
  150.     int yy_buf_size;
  151.  
  152.     /* Number of characters read into yy_ch_buf, not including EOB
  153.      * characters.
  154.      */
  155.     int yy_n_chars;
  156.  
  157.     /* Whether this is an "interactive" input source; if so, and
  158.      * if we're using stdio for input, then we want to use getc()
  159.      * instead of fread(), to make sure we stop fetching input after
  160.      * each newline.
  161.      */
  162.     int yy_is_interactive;
  163.  
  164.     /* Whether to try to fill the input buffer when we reach the
  165.      * end of it.
  166.      */
  167.     int yy_fill_buffer;
  168.  
  169.     int yy_buffer_status;
  170. #define YY_BUFFER_NEW 0
  171. #define YY_BUFFER_NORMAL 1
  172.     /* When an EOF's been seen but there's still some text to process
  173.      * then we mark the buffer as YY_EOF_PENDING, to indicate that we
  174.      * shouldn't try reading from the input source any more.  We might
  175.      * still have a bunch of tokens to match, though, because of
  176.      * possible backing-up.
  177.      *
  178.      * When we actually see the EOF, we change the status to "new"
  179.      * (via yyrestart()), so that the user can continue scanning by
  180.      * just pointing yyin at a new input file.
  181.      */
  182. #define YY_BUFFER_EOF_PENDING 2
  183.     };
  184.  
  185. static YY_BUFFER_STATE yy_current_buffer = 0;
  186.  
  187. /* We provide macros for accessing buffer states in case in the
  188.  * future we want to put the buffer states in a more general
  189.  * "scanner state".
  190.  */
  191. #define YY_CURRENT_BUFFER yy_current_buffer
  192.  
  193.  
  194. /* yy_hold_char holds the character lost when yytext is formed. */
  195. static char yy_hold_char;
  196.  
  197. static int yy_n_chars;        /* number of characters read into yy_ch_buf */
  198.  
  199.  
  200. int yyleng;
  201.  
  202. /* Points to current character in buffer. */
  203. static char *yy_c_buf_p = (char *) 0;
  204. static int yy_init = 1;        /* whether we need to initialize */
  205. static int yy_start = 0;    /* start state number */
  206.  
  207. /* Flag which is used to allow yywrap()'s to do buffer switches
  208.  * instead of setting up a fresh yyin.  A bit of a hack ...
  209.  */
  210. static int yy_did_buffer_switch_on_eof;
  211.  
  212. static void yyunput YY_PROTO(( int c, char *buf_ptr ));
  213. void yyrestart YY_PROTO(( FILE *input_file ));
  214. void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
  215. void yy_load_buffer_state YY_PROTO(( void ));
  216. YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
  217. void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
  218. void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
  219.  
  220. static int yy_start_stack_ptr = 0;
  221. static int yy_start_stack_depth = 0;
  222. static int *yy_start_stack = 0;
  223. static void yy_push_state YY_PROTO(( int new_state ));
  224. static void yy_pop_state YY_PROTO(( void ));
  225. static int yy_top_state YY_PROTO(( void ));
  226.  
  227. static void *yy_flex_alloc YY_PROTO(( unsigned int ));
  228. static void *yy_flex_realloc YY_PROTO(( void *, unsigned int ));
  229. static void yy_flex_free YY_PROTO(( void * ));
  230.  
  231. #define yy_new_buffer yy_create_buffer
  232.  
  233. #define INITIAL 0
  234. typedef unsigned char YY_CHAR;
  235. typedef int yy_state_type;
  236.  
  237. #define YY_USES_REJECT
  238. FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
  239. extern char *yytext;
  240. #define yytext_ptr yytext
  241.  
  242. #ifndef yytext_ptr
  243. static void yy_flex_strncpy YY_PROTO(( char *, const char *, int ));
  244. #endif
  245.  
  246. #ifdef __cplusplus
  247. static int yyinput YY_PROTO(( void ));
  248. #else
  249. static int input YY_PROTO(( void ));
  250. #endif
  251.  
  252. static yy_state_type yy_get_previous_state YY_PROTO(( void ));
  253. static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
  254. static int yy_get_next_buffer YY_PROTO(( void ));
  255. static void yy_fatal_error YY_PROTO(( const char msg[] ));
  256.  
  257. /* Done after the current pattern has been matched and before the
  258.  * corresponding action - sets up yytext.
  259.  */
  260. #define YY_DO_BEFORE_ACTION \
  261.     yytext_ptr = yy_bp; \
  262.     yyleng = yy_cp - yy_bp; \
  263.     yy_hold_char = *yy_cp; \
  264.     *yy_cp = '\0'; \
  265.     yy_c_buf_p = yy_cp;
  266.  
  267. #define YY_END_OF_BUFFER 47
  268. static const short int yy_acclist[741] =
  269.     {   0,
  270.        47,   45,   46,   44,   45,   46,   45,   46,   30,   45,
  271.        46,   45,   46,   44,   45,   46,   44,   45,   46,16415,
  272.        44,   45,   46,16415,   45,   46,   24,   44,   45,   46,
  273.        44,   45,   46,   44,   45,   46,   44,   45,   46,   44,
  274.        45,   46,   44,   45,   46,   44,   45,   46,   44,   45,
  275.        46,   44,   45,   46,   44,   45,   46,   23,   44,   45,
  276.        46,   45,   46,   44,   45,   46,   24,   44,   45,   46,
  277.        44,   45,   46,   44,   45,   46,   44,   45,   46,   44,
  278.        45,   46,   44,   45,   46,   44,   45,   46,   44,   45,
  279.        46,   45,   46,   45,   46,   44,   45,   46,   44,   45,
  280.  
  281.        46,   44,   45,   46,16415,   44,   45,   46,16415,   45,
  282.        46,   24,   44,   45,   46,   44,   45,   46,   44,   45,
  283.        46,   44,   45,   46,   44,   45,   46,   44,   45,   46,
  284.        44,   45,   46,   44,   45,   46,   44,   45,   46,   44,
  285.        45,   46,   23,   44,   45,   46,   44,   45,   46,   24,
  286.        44,   45,   46,   44,   45,   46,   44,   45,   46,   44,
  287.        45,   46,   44,   45,   46,   44,   45,   46,   44,   45,
  288.        46,   44,   45,   46,   45,   46,   44,   19,   44,    9,
  289.        44,   44,   44,16415, 8223,   44,   39,   44,   44,   44,
  290.        44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
  291.  
  292.        44,    9,   44,   44,   44,   44,   44,   44,   44,   44,
  293.        40,   44,    3,   44,   44,   44,    4,   44,   44,    3,
  294.        44,   44,    4,   44,   44,   44,   44,    9,   44,   38,
  295.        44,   43,   44,    9,   44,   43,   44,   44,16415,   43,
  296.      8223,   44,   44,   44,   43,   44,   44,   44,   44,   44,
  297.        44,   44,   44,   44,   44,   44,   44,    9,   44,   44,
  298.        44,   44,   44,   44,   44,   44,   44,    3,   44,   43,
  299.        44,   44,    4,   44,   44,    3,   44,   43,   44,    4,
  300.        44,   44,   44,   44,    9,   44,   17,    9,   44,   28,
  301.        44,   28,    8,   44, 8223,   27,   44,   27,   29,   44,
  302.  
  303.        44,   44,   44,    6,   44,   44,   44,   44,   44,   44,
  304.        44,   44,   44,    9,   44,   44,   44,   44,   44,   44,
  305.        44,   44,    4,   44,   44,    3,   44,   44,    3,   44,
  306.         4,    5,   44,    4,   44,    4,   44,   44,   44,    3,
  307.        44,    4,    4,   44,    5,    6,   44,    4,   44,    9,
  308.        44,   38,   43,    9,   44,   28,   44,    8,   44,   28,
  309.        43,   27,   44,   27,   43,   39,   44,   44,   43,   44,
  310.        43,   44,    6,   44,   44,   44,   44,   44,   44,   44,
  311.        44,   44,    9,   44,   44,   44,   44,   44,   44,   44,
  312.        44,    4,   44,   44,   43,    3,   44,   44,    3,   44,
  313.  
  314.         4,   43,    5,   44,    4,   44,    4,   44,   44,   43,
  315.        44,    3,   44,    4,   43,    4,   44,    5,    6,   44,
  316.         4,   44,    9,   44,   42,   42,   41,   30,   30,   44,
  317.         6,   44,    7,   44,    6,   44,   44,   44,   44,   44,
  318.        44,   22,   44,   44,   18,   44,   44,   44,   44,   44,
  319.        44,   44,   44,   40,    3,    3,    2,   44,    5,    4,
  320.         5,   44,    4,    2,    7,   44,    5,    6,    5,    6,
  321.        44,    5,   44,   44,   30,   43,   44,   43,   43,    6,
  322.        44,   43,    7,   44,    6,   43,   44,   44,   43,   44,
  323.        44,   44,   44,   22,   44,   44,   18,   44,   44,   44,
  324.  
  325.        44,   44,   44,   44,   44,   43,    2,   44,   43,    5,
  326.        43,   43,    4,   43,    5,   44,   43,    2,    7,   44,
  327.         5,    6,   43,    5,    6,   44,    5,   44,   44,   24,
  328.         7,   24,   44,    1,   44,   44,   22,   44,   44,   44,
  329.        44,   44,   44,   44,   23,   23,   44,   35,   40,    2,
  330.         2,   44,    5,    5,    2,    7,   43,   43,   43,   43,
  331.        43,   43,    7,   43,   24,   44,   43,    1,   44,   44,
  332.        22,   44,   44,   44,   44,   44,   44,   44,   23,   44,
  333.         2,   43,    2,   44,   43,   43,    5,   43,    4,   43,
  334.         2,    7,   43,   32,   42,   28,   28,   27,   27,   29,
  335.  
  336.        29,   26,   24,    1,    1,   44,   44,   44,   44,   10,
  337.        44,   44,   44,   25,   23,   33,   40,   35,    2,    2,
  338.        32,   38,   43,   28,   43,   43,   28,   43,   43,   27,
  339.        43,   43,   27,   43,    1,   43,    1,   44,   44,   44,
  340.        44,   10,   44,   44,   44,   43,   43,    2,   43,    5,
  341.        43,   29,   24,    1,    1,   22,   44,   44,   44,   10,
  342.        44,   44,   44,   23,   43,   43,    1,   43,   44,   44,
  343.        44,   10,   44,   44,   44,    2,   43,   12,   24,   44,
  344.        44,   44,   11,   23,    1,   43,   44,   44,   44,   12,
  345.        12,   44,   44,   16,   44,   11,   11,   44,   43,   44,
  346.  
  347.        16,   44,   21,   44,   44,   43,   43,   44,   44,   21,
  348.        44,   44,   43,   43,   44,   44,   36,   44,   43,   43,
  349.        36,   44,   14,   20,   24,   36,   13,   23,   37,   37,
  350.        39,   36,   43,   26,   20,   25,   21,   15,   38,   34
  351.     } ;
  352.  
  353. static const short int yy_accept[935] =
  354.     {   0,
  355.         1,    1,    1,    2,    4,    7,    9,   12,   14,   17,
  356.        21,   25,   27,   31,   34,   37,   40,   43,   46,   49,
  357.        52,   55,   58,   62,   64,   67,   71,   74,   77,   80,
  358.        83,   86,   89,   92,   94,   96,   99,  102,  106,  110,
  359.       112,  116,  119,  122,  125,  128,  131,  134,  137,  140,
  360.       143,  147,  150,  154,  157,  160,  163,  166,  169,  172,
  361.       175,  177,  178,  178,  178,  178,  178,  179,  179,  179,
  362.       180,  180,  182,  182,  182,  182,  183,  183,  185,  185,
  363.       187,  187,  188,  188,  189,  189,  190,  190,  191,  192,
  364.       193,  194,  195,  196,  197,  198,  199,  200,  201,  202,
  365.  
  366.       204,  205,  206,  207,  208,  209,  209,  210,  211,  211,
  367.       211,  211,  211,  212,  213,  215,  215,  216,  217,  219,
  368.       220,  222,  222,  223,  225,  226,  227,  228,  230,  230,
  369.       230,  230,  231,  231,  232,  233,  234,  236,  237,  238,
  370.       240,  241,  243,  243,  244,  245,  246,  247,  248,  249,
  371.       250,  251,  252,  253,  254,  255,  256,  257,  258,  260,
  372.       261,  262,  263,  264,  265,  266,  267,  268,  270,  271,
  373.       272,  273,  275,  276,  278,  279,  280,  282,  283,  284,
  374.       285,  287,  287,  287,  287,  287,  287,  287,  287,  287,
  375.       287,  287,  288,  288,  288,  288,  290,  292,  293,  295,
  376.  
  377.       296,  296,  296,  296,  298,  299,  300,  300,  300,  300,
  378.       300,  300,  300,  300,  301,  301,  302,  302,  303,  303,
  379.       304,  306,  307,  308,  309,  310,  311,  312,  313,  314,
  380.       316,  317,  318,  319,  320,  321,  321,  321,  321,  321,
  381.       321,  321,  322,  323,  323,  323,  323,  323,  325,  325,
  382.       326,  326,  326,  328,  329,  331,  332,  334,  334,  334,
  383.       336,  338,  339,  339,  340,  342,  343,  345,  348,  350,
  384.       352,  353,  353,  353,  353,  353,  354,  354,  356,  358,
  385.       360,  362,  364,  366,  366,  367,  367,  368,  369,  370,
  386.       371,  372,  373,  375,  376,  377,  378,  379,  380,  381,
  387.  
  388.       382,  383,  385,  386,  387,  388,  389,  390,  391,  392,
  389.       394,  395,  396,  398,  399,  401,  403,  405,  407,  409,
  390.       410,  411,  412,  414,  416,  418,  421,  423,  425,  425,
  391.       426,  427,  427,  427,  428,  428,  428,  429,  429,  430,
  392.       430,  430,  430,  431,  431,  431,  431,  431,  431,  431,
  393.       431,  431,  431,  431,  431,  431,  431,  431,  431,  431,
  394.       431,  431,  431,  433,  433,  433,  435,  436,  437,  438,
  395.       438,  439,  440,  441,  442,  444,  444,  445,  447,  448,
  396.       449,  450,  451,  452,  452,  452,  452,  452,  452,  452,
  397.       452,  452,  452,  452,  453,  454,  454,  454,  454,  454,
  398.  
  399.       455,  456,  456,  457,  459,  460,  461,  461,  461,  463,
  400.       464,  464,  467,  469,  472,  474,  475,  475,  476,  476,
  401.       476,  476,  476,  477,  478,  479,  480,  480,  480,  482,
  402.       483,  485,  487,  488,  489,  490,  491,  492,  493,  494,
  403.       496,  497,  499,  500,  501,  502,  503,  504,  505,  506,
  404.       507,  509,  510,  512,  513,  515,  517,  518,  521,  524,
  405.       527,  529,  530,  530,  530,  530,  530,  530,  530,  530,
  406.       530,  530,  530,  530,  530,  530,  530,  530,  530,  530,
  407.       530,  530,  530,  530,  530,  531,  531,  532,  534,  536,
  408.       537,  537,  539,  539,  540,  541,  542,  543,  544,  545,
  409.  
  410.       545,  545,  545,  545,  545,  545,  545,  545,  545,  546,
  411.       548,  548,  548,  550,  550,  550,  551,  551,  551,  553,
  412.       554,  555,  557,  557,  557,  557,  557,  557,  557,  558,
  413.       559,  560,  561,  562,  563,  563,  563,  565,  567,  568,
  414.       570,  571,  573,  574,  575,  576,  577,  578,  579,  581,
  415.       583,  585,  586,  587,  589,  591,  594,  594,  596,  596,
  416.       597,  597,  598,  598,  599,  599,  600,  600,  601,  601,
  417.       602,  602,  602,  602,  602,  602,  602,  602,  603,  603,
  418.       603,  603,  603,  603,  603,  603,  604,  605,  605,  605,
  419.       605,  607,  608,  608,  608,  608,  608,  608,  608,  609,
  420.  
  421.       610,  612,  613,  614,  614,  614,  614,  614,  614,  615,
  422.       615,  615,  615,  615,  615,  616,  616,  618,  618,  619,
  423.       620,  621,  623,  623,  623,  624,  626,  627,  629,  630,
  424.       632,  633,  635,  635,  635,  637,  639,  640,  641,  642,
  425.       644,  645,  646,  647,  648,  650,  652,  652,  652,  653,
  426.       653,  653,  653,  653,  653,  654,  654,  654,  654,  654,
  427.       654,  654,  655,  655,  656,  656,  657,  657,  657,  657,
  428.       657,  657,  657,  657,  658,  659,  660,  662,  663,  664,
  429.       664,  664,  664,  664,  664,  665,  665,  665,  665,  665,
  430.       665,  665,  665,  665,  666,  667,  669,  670,  671,  672,
  431.  
  432.       674,  675,  676,  678,  678,  678,  678,  678,  678,  678,
  433.       678,  678,  678,  679,  679,  680,  680,  680,  680,  680,
  434.       680,  680,  680,  680,  680,  680,  681,  682,  683,  683,
  435.       683,  683,  683,  683,  684,  684,  685,  685,  685,  685,
  436.       685,  685,  687,  688,  689,  690,  690,  690,  691,  691,
  437.       691,  691,  692,  692,  692,  692,  692,  692,  692,  692,
  438.       692,  692,  693,  694,  696,  696,  697,  697,  697,  698,
  439.       698,  698,  698,  698,  698,  699,  700,  701,  703,  703,
  440.       703,  703,  703,  703,  703,  703,  704,  704,  704,  704,
  441.       705,  706,  706,  706,  706,  706,  706,  706,  706,  707,
  442.  
  443.       708,  709,  710,  710,  710,  710,  710,  710,  710,  710,
  444.       710,  710,  710,  711,  711,  711,  711,  711,  711,  711,
  445.       712,  713,  713,  713,  713,  713,  713,  713,  713,  713,
  446.       713,  714,  715,  716,  717,  717,  717,  717,  717,  717,
  447.       717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
  448.       717,  717,  717,  719,  719,  719,  719,  719,  719,  719,
  449.       719,  719,  719,  719,  719,  720,  721,  723,  723,  724,
  450.       724,  724,  725,  726,  726,  726,  726,  726,  726,  726,
  451.       727,  728,  728,  728,  729,  729,  730,  730,  730,  732,
  452.       732,  734,  734,  735,  736,  736,  736,  736,  736,  736,
  453.  
  454.       737,  737,  737,  737,  737,  737,  737,  738,  738,  738,
  455.       738,  738,  738,  738,  739,  739,  739,  739,  739,  739,
  456.       739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
  457.       739,  740,  741,  741
  458.     } ;
  459.  
  460. static const int yy_ec[256] =
  461.     {   0,
  462.         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
  463.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  464.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  465.         1,    4,    1,    5,    6,    1,    7,    1,    8,    9,
  466.        10,   11,   12,    1,   13,   14,   15,   16,   17,   18,
  467.        19,   19,   19,   19,   19,   19,   20,   21,   22,    1,
  468.        23,    1,    1,    1,   24,   25,   26,   27,   28,   29,
  469.        30,   31,   32,   33,   34,   35,   36,   37,   38,   39,
  470.        40,   41,   42,   43,   44,   33,   45,   46,   47,   33,
  471.        48,    1,   49,    1,   50,    1,   51,   52,   53,   54,
  472.  
  473.        55,   56,   57,   58,   59,   33,   60,   61,   62,   63,
  474.        64,   65,   40,   66,   67,   68,   69,   33,   70,   46,
  475.        47,   33,   71,    1,   72,    1,    1,    1,    1,    1,
  476.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  477.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  478.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  479.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  480.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  481.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  482.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  483.  
  484.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  485.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  486.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  487.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  488.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  489.         1,    1,    1,    1,    1
  490.     } ;
  491.  
  492. static const int yy_meta[73] =
  493.     {   0,
  494.         1,    2,    3,    2,    1,    1,    1,    4,    5,    6,
  495.         1,    1,    7,    2,    1,    4,    4,    4,    4,    4,
  496.         8,    1,    1,    4,    9,    4,    4,    4,    4,    4,
  497.         4,    4,    4,    9,    4,    4,    9,    4,    9,    9,
  498.         9,    4,    4,    4,    4,    7,    4,    1,    1,    1,
  499.        10,   10,   10,   10,   10,   10,   10,   10,    4,    9,
  500.         4,    4,    9,    4,    9,    9,    4,    4,    4,    4,
  501.         1,    1
  502.     } ;
  503.  
  504. static const short int yy_base[984] =
  505.     {   0,
  506.         0,   72, 3524, 3525,    0,  136, 3519,  134,  144,  164,
  507.       233, 3519,  296,  118,  109,  124,  208,  162,  201,  225,
  508.       240,  195,  261,  357,  417,  463,  266,  275,  117,  202,
  509.       208,  106,  242,  318, 3517,  143,  373,  520,  370,  238,
  510.       587,  324,  335,  376,  383,  390,  387,  641,  388,  388,
  511.       429,  692,  738,  271,  399,  251,  347,  390,  204,  478,
  512.       594,    0, 3511,  313,  476,  237, 3525, 3507,  297,  323,
  513.      3501, 3501, 3499,  418,  613, 3499,  328,    0, 3498,    0,
  514.      3510, 3525,  773,  449,  616,  831,  624, 3488,  440, 3460,
  515.      3482, 3454, 3484, 3456, 3462, 3436, 3461, 3435, 3464, 3463,
  516.  
  517.       460, 3458,  551, 3475, 3447,  866, 3465, 3437, 3446,  936,
  518.       406, 1008, 3525,  632, 1072,  663,  671,  471, 1130,  679,
  519.      1184,  709,  717, 1234,  493,  575, 3430, 3429,  301, 3420,
  520.       634, 3487, 3486,  505, 3486,  615,  791,  245,  805, 1299,
  521.       527,  588,  458,  802, 1358,  812,  639,  602,  731,  777,
  522.       732,  683,  780,  733,  809,  795,  811,  812,  853,  828,
  523.       820,  854,  872,  873,  819,  895,  910, 1408,  920,  948,
  524.       891, 1467, 1012, 1521,  984, 1050, 1571,  640,  971, 1013,
  525.      1023,  922,  457,  522,  589, 3478,  615, 1124, 1141, 3477,
  526.      3414, 3525, 3481, 3480, 3479, 3469, 3477, 3476,    0, 3525,
  527.  
  528.      3475, 3474, 3473, 3472, 3471,  893,  441,  565,  597,  474,
  529.       750,  820, 1014,  684,  963, 1030, 1121,  978, 1030, 3448,
  530.      1625, 3420, 3446, 3418, 3425, 3399, 1046, 3440, 3412, 3453,
  531.         0, 3433, 3405, 3428, 3401,  716,  740,  862,  868,  905,
  532.      1051, 3418, 3392,  773, 1117,  398, 1683, 1181, 1161, 1209,
  533.      1225, 1333, 3449, 1036, 1146, 1747, 1415, 1268, 1335, 3448,
  534.      1805, 1337, 1442, 1042, 1170, 1073, 1166, 1480, 1190, 3444,
  535.      3525, 1309, 1100, 3452,  105, 3452,  408, 1202, 1024,  962,
  536.       661, 1191,  777,  949, 3450, 1097, 1237, 1204, 1498, 1277,
  537.      1270, 1208, 1859, 1173, 1322, 1314, 1302, 1067, 1415, 1283,
  538.  
  539.      1414, 1324,    0, 1376, 1211, 1397, 1418, 1399, 1006, 1910,
  540.      1506, 1562, 1436, 1494, 1518, 1974, 1584, 1462, 1505, 1687,
  541.      1600, 1583, 1622, 2038, 1551, 1710, 1651, 1574, 1365, 3525,
  542.      1015, 1122, 3443, 3525, 1693, 3442, 3441, 3378, 3377, 3431,
  543.      3430, 3429, 3429,  637, 3428,  399, 3427,  920, 1653, 1365,
  544.      3400, 3374, 3399, 3373,  758, 3395, 3369, 3407, 3379, 3392,
  545.      3366, 1183,    0, 1585, 1566,    0, 3525, 3398, 1614, 1738,
  546.      1646, 3371, 3396, 3369, 1443, 1246, 1369,    0, 3390, 3397,
  547.      3369, 3397, 3369, 3381, 3355, 3380, 3354, 1161, 3376, 3350,
  548.      3375, 3349, 1340, 3387, 3359,  885, 1049,  871, 1697, 3408,
  549.  
  550.      3402, 1697, 3525, 1792, 1811, 3401, 1734, 1829, 3400, 3525,
  551.      1703, 1897, 1916, 1961, 1708, 3345, 1870, 3404, 1748, 1764,
  552.      3356, 3342, 1726, 1589, 1143, 1822, 1377, 1228, 1422, 1764,
  553.      1508, 3402, 1510, 1791, 1846, 1790, 1818, 1715, 1819, 1798,
  554.      1938, 1517, 1886, 1835, 1839, 1621, 1578, 1854, 1795, 1926,
  555.      1980, 1982, 2051, 2056,  323, 1944, 1991, 2043, 2102, 2093,
  556.      2130, 1900, 1923, 3394, 1159, 3393, 3330, 3391, 3328, 3389,
  557.      3326, 3380, 1577, 3368, 3340, 3365, 3337, 2085, 3364, 3336,
  558.      3362, 3334, 3356, 3328, 1817, 2011, 3525, 3382, 2132, 1389,
  559.      2137, 3381, 1419, 3356, 3328, 3345, 3318, 3344, 3317, 3350,
  560.  
  561.      3322, 3347, 3319, 2107, 3346, 3318, 3340, 3312, 1881, 3366,
  562.      1235, 2083, 3525, 3364, 2177, 2167, 2169, 2176, 3358, 3357,
  563.      3525, 2206, 1645, 3349, 1959, 3349, 3302, 3296, 3359, 2047,
  564.      1537, 1686, 1538, 1906, 1287,  709, 3358, 1967, 2219, 2225,
  565.      1919, 2116, 2010, 2115, 1979, 2004, 2150, 2050, 2156, 2258,
  566.      2204, 2238, 2271, 1750, 3357, 2291, 2059, 3525, 3349, 3348,
  567.      3285, 3284, 3345, 3344, 3281, 3280, 3341, 3340, 3277, 3276,
  568.      3332, 3328, 3304, 3278, 3315, 3287, 1279, 3337, 3298, 3272,
  569.      3297, 3271, 3306, 3278, 2035, 3330, 2304, 2347, 2219, 2321,
  570.      3323, 1458, 3322, 1677, 3284, 1750, 3302, 3274, 3286, 3260,
  571.  
  572.      2242, 3302, 3274, 3236, 3201, 3229, 3192, 1319, 3233, 3185,
  573.      3110, 3137, 3100, 2255, 3143, 2394, 3525, 2303, 3525, 3127,
  574.      3525, 3123, 3048, 3036, 1873, 2032, 1964, 2091, 2067, 2079,
  575.      2095, 2179,  390, 1133, 2428, 2247, 2203, 2294, 2268, 2347,
  576.      2175, 2312, 2375, 2437, 2097, 3030, 2335, 3019, 2914, 2874,
  577.      2848, 2883, 2855, 1507, 3525, 2855, 2820, 2849, 2787, 2832,
  578.      1804, 2830, 1832, 3525, 2829, 2826, 2793, 2767, 2828, 2792,
  579.      2765, 2787, 2761, 2785, 2759, 1979,    0, 2782, 2756, 2780,
  580.      2754, 2787, 2759, 1894, 3525, 2780, 2753, 2805, 2160, 2810,
  581.      2745, 1265,  461, 2446, 2467, 2190, 2318, 2332, 2398, 2197,
  582.  
  583.      2343, 2358, 2809, 2356, 2792, 1557, 2767, 2741, 2764, 2737,
  584.      2255, 2799, 2392, 2791, 2790, 2792, 2753, 2727, 2765, 2737,
  585.      2455, 2761, 2733, 2745, 2719, 2533, 2757, 2729, 2741, 2714,
  586.      2737, 2701, 2328, 2460, 2757, 2755, 2758, 2691, 2687, 1431,
  587.      1304, 2741, 2605, 2369, 2232, 2391, 2737, 2469, 2736, 2295,
  588.      2368, 3525, 1996, 2713, 2685, 2709, 2673, 2677, 2651, 2424,
  589.      2427, 2677, 2442,    0, 2713, 2486, 2706, 2445, 3525, 2123,
  590.      2642, 2616, 1399, 1642, 2749, 2492, 2466, 2265, 2507, 2481,
  591.      2177, 2276, 2491, 2637, 2610, 2530, 2641, 2613, 2501, 2632,
  592.      2605, 2548, 2282, 2514, 2595, 2585, 1188, 1927, 2564, 2572,
  593.  
  594.      2609, 2579, 2558, 2633, 2527, 2528, 2576, 2544, 2533, 2503,
  595.      2481, 2422, 3525, 2454, 2412, 2400, 2374, 2532, 2546, 2405,
  596.      2369, 2406, 2532, 2538, 2369, 2334, 2338, 2299, 1641, 2377,
  597.      2595, 2633, 2224, 2194, 2575, 2302, 2165, 2081, 2090, 2053,
  598.      2065, 1983, 1976, 1911, 1924, 1865, 1816, 1755, 1748, 1698,
  599.      2594, 2602,    0, 2391, 1711, 1674, 1637, 1605, 1598, 1455,
  600.      1488, 1417, 1450, 1619, 2636, 2639,    0, 2630, 3525, 1378,
  601.      1328, 2438, 1337, 1278, 1156, 1071, 1028, 1056, 1022, 2544,
  602.      3525, 1056, 1027,  994,  990, 3525,  896,  912, 3525, 2470,
  603.      2655, 2631, 3525, 3525,  904,  879,  789,  705,  538, 3525,
  604.  
  605.       518,  365, 2126, 2637,  381,  307, 3525,  239, 2066, 2441,
  606.      2669, 2513, 2611, 3525, 2574, 2657, 2658, 2701, 2702, 2703,
  607.      2705, 2710, 2718, 2719, 2730, 2732, 2739, 2763, 2765, 2577,
  608.       171, 3525, 3525, 2834, 2844, 2854, 2864, 2874, 2881, 2891,
  609.      2901, 2910, 2920, 2930, 2940, 2950, 2960, 2970, 2980, 2990,
  610.      3000, 3010, 3020, 3030, 3040, 3050, 3060, 3070, 3080, 3090,
  611.      3094, 3104, 3114, 3124, 3134, 3144, 3154, 3164, 3174, 3184,
  612.      3194, 3204, 3214, 3224, 3234, 3244, 3254, 3264, 3274, 3284,
  613.      3294, 3304, 3314
  614.     } ;
  615.  
  616. static const short int yy_def[984] =
  617.     {   0,
  618.       933,  933,  933,  933,  934,  935,  933,  933,  934,  933,
  619.       934,  936,  934,  934,  934,  934,   13,  934,  934,  934,
  620.        13,  934,  934,  937,  934,   13,   25,   25,   25,   25,
  621.        25,   25,  934,  938,  933,  939,  939,  933,   38,  936,
  622.       939,  939,  939,  939,   41,  939,  939,  939,   41,  939,
  623.       939,  939,   41,   52,   52,   52,   52,   52,   52,  939,
  624.       938,  934,  940,  941,  940,  933,  933,  933,  933,  934,
  625.       933,  934,  933,  942,  942,  934,  933,   11,  933,  934,
  626.       936,  933,  933,  934,  933,  934,  933,  934,   86,  934,
  627.       934,  934,  934,  934,  934,  934,  934,  934,  934,  934,
  628.  
  629.       934,  934,   86,  934,  934,  933,  934,  934,  943,  937,
  630.       943,  944,  933,  934,  934,  933,  934,  934,  934,  934,
  631.       115,  933,  934,   86,   86,  934,  934,  934,  938,  945,
  632.       938,  933,  946,  939,  947,  939,  939,  947,  939,   48,
  633.       947,  939,  948,  939,  939,  947,  939,  145,  939,  939,
  634.       939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
  635.       939,  145,  939,  939,  939,  939,  939,  145,  947,  939,
  636.       939,  939,  939,  168,  947,  939,  145,  145,  939,  939,
  637.       939,  938,  949,  950,  950,  951,  952,  949,  949,  953,
  638.       954,  933,  933,  933,  933,  934,  934,  933,  934,  933,
  639.  
  640.       933,  933,  933,  934,  933,  933,  933,  933,  933,  933,
  641.       933,  933,  933,  934,  933,   86,  933,  934,  933,  934,
  642.       934,  934,  934,  934,  934,  934,  934,  934,  934,  934,
  643.       221,  934,  934,  934,  934,  933,  933,  933,  933,  933,
  644.       933,  934,  934,  955,  956,  957,  958,  934,  933,  934,
  645.       933,  933,  934,  934,  934,  933,  934,  933,  933,  934,
  646.       934,  934,  933,  934,  934,  256,  261,  221,  934,  934,
  647.       933,  938,  933,  946,  933,  947,  933,  939,  939,  939,
  648.       947,  939,  947,  948,  946,  959,  939,  145,  947,  939,
  649.       947,  939,  145,  939,  939,  939,  939,  939,  939,  939,
  650.  
  651.       939,  939,  293,  939,  939,  939,  939,  939,  939,  939,
  652.       939,  947,  939,  939,  939,  947,  310,  939,  310,  939,
  653.       947,  939,  939,  947,  310,  293,  939,  939,  938,  933,
  654.       952,  952,  960,  933,  949,  953,  953,  954,  954,  933,
  655.       933,  933,  934,  933,  933,  933,  933,  933,  933,  933,
  656.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  657.       933,  933,  934,  961,  933,  934,  933,  934,  221,  933,
  658.       934,  934,  934,  934,  934,  933,  934,  934,  934,  934,
  659.       934,  934,  934,  933,  933,  933,  933,  933,  933,  933,
  660.       933,  933,  933,  934,  934,  955,  955,  957,  956,  962,
  661.  
  662.       933,  933,  933,  934,  933,  933,  933,  933,  934,  933,
  663.       933,  934,  933,  934,  934,  934,  938,  933,  933,  933,
  664.       933,  933,  963,  939,  947,  947,  959,  959,  939,  947,
  665.       939,  947,  939,  293,  947,  939,  939,  939,  939,  939,
  666.       939,  939,  939,  939,  939,  939,  939,  939,  939,  947,
  667.       310,  947,  947,  947,  947,  939,  947,  310,  947,  310,
  668.       939,  939,  938,  960,  949,  964,  965,  966,  967,  968,
  669.       969,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  670.       933,  933,  933,  933,  933,  933,  933,  934,  934,  934,
  671.       933,  934,  933,  934,  934,  934,  934,  934,  934,  933,
  672.  
  673.       933,  933,  933,  933,  933,  933,  933,  933,  933,  934,
  674.       955,  956,  933,  962,  933,  933,  933,  933,  934,  933,
  675.       933,  933,  938,  933,  933,  933,  933,  933,  963,  963,
  676.       970,  971,  972,  973,  959,  959,  947,  939,  947,  310,
  677.       939,  939,  939,  939,  939,  939,  939,  939,  939,  947,
  678.       939,  947,  947,  947,  947,  947,  938,  933,  964,  964,
  679.       965,  965,  966,  966,  967,  967,  968,  968,  969,  969,
  680.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  681.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  682.       934,  934,  974,  933,  933,  933,  933,  933,  934,  934,
  683.  
  684.       934,  934,  934,  933,  933,  933,  933,  933,  933,  933,
  685.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  686.       933,  933,  933,  933,  970,  970,  971,  971,  972,  972,
  687.       973,  973,  959,  959,  947,  939,  939,  939,  939,  939,
  688.       939,  939,  947,  947,  947,  947,  938,  933,  933,  933,
  689.       933,  933,  933,  933,  933,  933,  933,  933,  933,  975,
  690.       933,  933,  933,  933,  974,  974,  933,  933,  933,  933,
  691.       933,  933,  933,  934,  934,  934,  934,  934,  934,  933,
  692.       933,  933,  933,  933,  933,  933,  933,  976,  933,  933,
  693.       933,  959,  959,  947,  947,  947,  939,  939,  939,  939,
  694.  
  695.       939,  939,  947,  938,  933,  933,  933,  933,  933,  933,
  696.       933,  933,  933,  975,  975,  933,  933,  933,  933,  933,
  697.       933,  933,  933,  933,  933,  977,  934,  934,  933,  933,
  698.       933,  933,  933,  933,  976,  976,  933,  933,  933,  959,
  699.       959,  947,  978,  939,  939,  938,  933,  933,  933,  933,
  700.       933,  933,  933,  933,  933,  933,  933,  933,  933,  979,
  701.       979,  977,  762,  934,  933,  933,  933,  933,  933,  933,
  702.       933,  933,  959,  959,  978,  980,  775,  939,  938,  933,
  703.       933,  933,  933,  933,  933,  933,  933,  933,  979,  762,
  704.       762,  933,  933,  933,  933,  933,  959,  959,  980,  980,
  705.  
  706.       775,  775,  938,  933,  933,  933,  933,  933,  933,  933,
  707.       933,  933,  933,  933,  933,  933,  933,  979,  979,  762,
  708.       762,  933,  933,  933,  933,  933,  933,  933,  959,  959,
  709.       980,  980,  775,  775,  938,  933,  933,  933,  933,  933,
  710.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  711.       979,  979,  762,  933,  933,  933,  933,  933,  933,  933,
  712.       981,  933,  982,  959,  980,  980,  775,  938,  933,  933,
  713.       933,  933,  933,  933,  933,  933,  933,  933,  933,  979,
  714.       933,  933,  933,  933,  981,  933,  933,  982,  933,  959,
  715.       980,  938,  933,  933,  933,  933,  933,  933,  933,  933,
  716.  
  717.       933,  933,  959,  938,  933,  933,  933,  933,  959,  938,
  718.       933,  983,  933,  933,  983,  983,  983,  983,  983,  983,
  719.       983,  983,  983,  983,  983,  983,  983,  983,  983,  983,
  720.       933,  933,    0,  933,  933,  933,  933,  933,  933,  933,
  721.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  722.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  723.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  724.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  725.       933,  933,  933
  726.     } ;
  727.  
  728. static const short int yy_nxt[3598] =
  729.     {   0,
  730.         4,    4,    4,    4,    4,    4,    4,    5,    6,    4,
  731.         7,    8,    5,    4,    4,    9,   10,   11,   11,   11,
  732.         4,   12,    4,    5,   13,   14,   15,    5,    5,   16,
  733.         5,    5,    5,   17,    5,   18,   17,   19,   20,   17,
  734.        21,   22,    5,    5,   23,    5,    5,   24,    4,    4,
  735.        25,   26,   27,   28,   29,   30,   31,   32,    5,   17,
  736.         5,   18,   17,   33,   20,   21,   22,    5,    5,   23,
  737.        34,    4,    4,    4,    4,    4,    4,   35,   35,    5,
  738.         6,    4,    7,    8,   36,    4,    4,   37,   38,   39,
  739.        39,   39,    4,   40,    4,   36,   41,   42,   43,   36,
  740.  
  741.        36,   44,   36,   36,   36,   45,   36,   46,   45,   47,
  742.        48,   45,   49,   50,   36,   36,   51,   36,   36,   24,
  743.         4,    4,   52,   53,   54,   55,   56,   57,   58,   59,
  744.        36,   45,   36,   46,   45,   60,   48,   49,   50,   36,
  745.        36,   51,   61,    4,   64,   67,   68,   69,   91,   93,
  746.        62,   65,   65,   65,   65,   65,   70,  118,   71,   72,
  747.        95,  421,  119,  135,   73,   74,   74,   75,  118,  422,
  748.       119,   62,  119,  932,   94,   92,   76,   74,   77,   78,
  749.        78,   78,   78,   78,   79,   97,   96,   62,   80,   62,
  750.        62,   62,   62,   62,   62,   62,   62,   80,   62,   62,
  751.  
  752.        80,   62,   80,   80,   80,   62,   62,   62,   62,   62,
  753.        62,  933,   98,   99,   80,   80,   80,   80,   80,   80,
  754.        80,   80,   62,   80,   62,   62,   80,   62,   80,   80,
  755.        62,   62,   62,   62,   74,   74,   74,  104,  100,   85,
  756.        82,  143,   62,  933,   95,  190,   74,  277,   78,   78,
  757.        78,   78,   78,  118,  127,  171,  119,   80,  119,  118,
  758.       172,  281,  105,  119,  106,  119,   80,  102,   62,   80,
  759.        96,   80,   80,   80,   62,  101,  101,  101,  101,  101,
  760.       101,  101,  101,   80,   80,   80,   80,   80,   80,   80,
  761.        80,  107,   80,  861,  103,   80,   91,   80,   80,   83,
  762.  
  763.        62,  150,  171,  130,  172,  128,  172,  191,   84,  193,
  764.        85,  194,   86,   86,   86,   93,   87,  195,  108,  119,
  765.       130,  186,  187,  126,  172,  277,  118,  119,  179,  119,
  766.        88,   62,  555,  131,  131,  131,  131,  131,  196,  197,
  767.        94,   84,   62,  205,  135,  206,   89,   89,   89,   89,
  768.        89,   89,   89,   89,  150,  135,   90,  109,  110,  110,
  769.       110,  109,  109,  109,  109,  109,  109,  109,  109,  111,
  770.       109,  109,  132,   74,  911,  152,   69,  109,  109,  109,
  771.        62,  151,  134,   62,  933,  136,  933,   71,  137,  132,
  772.       135,  933,   82,  138,   62,   62,  135,   62,  171,  158,
  773.  
  774.       153,  172,  399,  172,  109,  113,  109,  135,  135,  423,
  775.       135,  423,  154,  156,  205,  161,  206,  134,  244,   74,
  776.        74,   74,  134,  911,  159,  908,  154,  109,  109,  114,
  777.       163,   74,  106,  115,  115,  115,   62,  116,  155,  152,
  778.       157,  171,  162,  134,  692,  172,  400,  172,  134,  135,
  779.       171,  172,  155,  172,  113,  164,  221,  221,  221,  165,
  780.       285,  286,  117,   82,  153,  184,  330,  118,  119,  118,
  781.       118,  118,  118,  118,  118,  120,  231,  231,  231,  121,
  782.       121,  121,  351,  122,  184,   62,  166,  257,  257,  257,
  783.       180,  188,  188,  188,  188,  188,  189,  356,  135,  214,
  784.  
  785.       214,  214,  214,  214,  214,  214,  214,  352,  123,  268,
  786.       268,  268,   62,  124,  125,  124,  125,  125,  125,  125,
  787.       125,   74,   74,   75,  357,  135,  688,   62,  741,  277,
  788.       186,  331,  139,   74,   77,  140,  140,  140,  140,  140,
  789.       141,  181,  283,  134,  142,  134,  134,  134,  134,  134,
  790.       134,  134,  134,  142,  134,  134,  142,  134,  142,  142,
  791.       142,  134,  134,  134,  134,  134,  134,  221,  221,  221,
  792.       142,  142,  142,  142,  142,  142,  142,  142,  134,  142,
  793.       134,  134,  142,  134,  142,  142,  134,  134,  134,  134,
  794.        83,  257,  257,  257,   62,   62,  130,  186,  331,  144,
  795.  
  796.       907,   85,  353,  145,  145,  145,  182,  146,  135,  131,
  797.       131,  131,  131,  131,   74,   74,   74,  233,  293,  293,
  798.       293,  147,   62,  333,  334,  201,   74,  202,  354,  224,
  799.       278,  279,  144,  203,  355,  135,  130,  148,  148,  148,
  800.       148,  148,  148,  148,  148,  466,   62,  149,   62,  131,
  801.       131,  131,  131,  131,  272,   85,  326,  326,  326,  135,
  802.       355,  135,  292,  277,  425,  132,  215,  215,  215,  215,
  803.       215,  215,  215,  215,  219,  219,  219,  219,  219,  219,
  804.       219,  219,  248,  248,  248,  248,  248,  248,  248,  248,
  805.        62,  160,  160,  160,  160,  160,  160,  160,  160,   62,
  806.  
  807.       363,  363,  363,  135,  167,  132,  297,  467,  168,  168,
  808.       168,   82,  169,  256,  256,  256,  256,  256,  256,  256,
  809.       256,  119,  119,  119,  119,  119,  119,  119,  119,  261,
  810.       261,  261,  261,  261,  261,  261,  261,  170,   62,   62,
  811.        62,  907,  171,  172,  171,  171,  171,  171,  171,  171,
  812.       173,  135,  135,  135,  174,  174,  174,  384,  175,  266,
  813.       266,  266,  266,  266,  266,  266,  266,  267,  267,  267,
  814.       267,  267,  267,  267,  267,  634,  299,  386,  358,  277,
  815.       426,  294,  385,  176,   62,  397,  296,   62,  177,  178,
  816.       177,  178,  178,  178,  178,  178,  207,  135,   62,  478,
  817.  
  818.       135,  208,   62,  387,  295,  359,  280,  209,  210,   62,
  819.       211,  135,   62,  212,  277,  135,   62,  213,   62,   62,
  820.       282,  113,  135,  207,  478,  135,   62,   62,  208,  135,
  821.       298,  135,  135,  209,  210,   62,  211,  300,  212,  135,
  822.       135,  906,  213,  216,  303,  303,  303,  360,  135,  302,
  823.       308,  217,  287,  287,  287,  287,  287,  287,  287,  287,
  824.        62,  304,  291,  291,  291,  291,  291,  291,  291,  291,
  825.       293,  293,  293,  135,  361,  399,  216,  299,  301,   62,
  826.        62,  218,  218,  218,  218,  218,  218,  218,  218,  236,
  827.       280,  389,  135,  135,  237,  306,  349,  397,   62,  388,
  828.  
  829.       238,  239,   62,  211,  905,  350,  240,  317,  317,  317,
  830.       241,  135,  660,  350,  889,  135,  236,   62,  390,  400,
  831.       305,  237,  277,  307,  130,  388,  238,  239,  468,  211,
  832.       135,  240,  391,  113,  329,  241,  109,  110,  110,  110,
  833.       109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
  834.       109,  285,  286,  309,  902,   62,  109,  109,  109,  392,
  835.       310,  310,  310,  310,  310,  310,  310,  310,  135,   62,
  836.       316,  316,  316,  316,  316,  316,  316,  316,   62,  364,
  837.       364,  364,  135,  109,  113,  109,  277,  317,  317,  317,
  838.       469,  135,  886,  132,  366,  366,  366,  901,  172,  172,
  839.  
  840.       172,  172,  172,  172,  172,  172,  109,  109,  109,  245,
  841.       245,  245,  246,   62,  109,  109,  109,  109,  109,   62,
  842.        62,  109,  109,  333,  334,  296,  135,  344,  109,  109,
  843.        62,   62,  135,  135,  324,  324,  324,  324,  324,  324,
  844.       324,  324,   62,  135,  135,  362,  367,  367,  367,  376,
  845.       933,  362,  404,  404,  404,  109,  113,   62,  412,  412,
  846.       412,  511,  319,  319,  319,  319,  319,  319,  319,  319,
  847.       135,  377,  362,  449,   62,   62,  328,  362,  109,  109,
  848.       249,  900,  393,  900,  250,  899,  280,  135,  393,  413,
  849.       413,  413,  251,  898,  252,  813,  253,  113,  377,   82,
  850.  
  851.       325,  325,  325,  325,  325,  325,  325,  325,  253,  393,
  852.       418,  253,  253,  813,  393,  419,  420,  250,  245,  245,
  853.       245,  246,  254,  255,  254,  254,  254,  254,  254,  254,
  854.       933,  334,  184,  330,  253,   82,  440,  253,  258,  188,
  855.       188,  188,  188,  188,  189,  277,  257,  257,  257,  184,
  856.       330,  531,  259,  427,  260,  403,  335,  335,  335,  335,
  857.       335,  428,  404,  404,  404,  113,  260,  184,  558,  260,
  858.       260,  365,  365,  365,  365,  365,  365,  365,  365,  403,
  859.        62,  260,  414,  414,  414,  401,  412,  412,  412,  258,
  860.        82,  693,  260,  135,  348,  260,  262,  401,   62,  410,
  861.  
  862.       401,  401,  504,  259,  263,  260,  366,  366,  366,   62,
  863.       897,  135,  401,  532,  424,   62,  134,  260,   62,  485,
  864.       260,  260,  135,  401,  135,  437,  401,  504,  135,  262,
  865.        82,  135,  260,  433,  264,  265,  264,  264,  264,  264,
  866.       264,  264,  258,  260,   62,  485,  260,  511,  829,  134,
  867.       268,  268,  268,  429,  429,  429,  259,  135,  260,  254,
  868.       254,  254,  254,  254,  254,  254,  254,   82,  740,  445,
  869.       260,  493,  277,  260,  260,  402,  402,  402,  402,  402,
  870.       402,  402,  402,  617,   62,  269,  432,  432,  432,   82,
  871.        62,  536,  406,  431,  431,  431,  260,  135,  493,  260,
  872.  
  873.        74,   74,   74,  135,  406,  896,   82,  406,  406,   62,
  874.       442,  130,   74,  933,  140,  140,  140,  140,  140,  406,
  875.       578,   62,  135,  142,  417,  417,  417,  417,  417,   62,
  876.       406,   62,  142,  406,  135,  142,  443,  142,  142,  142,
  877.       895,  249,  135,  258,  135,  578,  440,  438,  633,  142,
  878.       142,  142,  142,  142,  142,  142,  142,  401,  142,  406,
  879.       609,  142,  774,  142,  142,   62,  439,  130,  472,  401,
  880.       288,  406,  401,  401,  406,  406,  509,  463,  289,   82,
  881.       132,  473,  893,   62,  401,  609,  406,  264,  264,  264,
  882.       264,  264,  264,  264,  264,  401,  135,  406,  401,  494,
  883.  
  884.       406,   82,  509,  288,   62,  893,   62,  444,  290,  290,
  885.       290,  290,  290,  290,  290,  290,  249,  135,  376,  135,
  886.       311,   62,   62,  407,  592,   62,  495,  535,  312,   62,
  887.       252,  446,  313,   82,  135,  135,  132,  408,  135,  409,
  888.       441,  448,  135,   62,  313,  403,  491,  313,  313,  597,
  889.       592,  409,  889,  311,  409,  409,  135,  797,  314,  315,
  890.       314,  314,  314,  314,  314,  314,  409,  441,  442,   62,
  891.       313,  410,  887,  313,   62,  258,  598,  409,  447,  492,
  892.       409,   97,  135,  317,  317,  317,  773,  135,  407,  259,
  893.       886,  318,  411,  411,  411,  411,  411,  411,  411,  411,
  894.  
  895.       277,   62,  408,  318,  409,  492,  318,  318,   98,  884,
  896.       451,  451,  451,   62,  135,   62,  409,   62,  318,  409,
  897.       409,  429,  429,  429,   62,   62,  135,  403,  135,  318,
  898.       135,  415,  318,  320,  451,  451,  451,  135,  135,  277,
  899.       277,  321,  409,  538,  711,  409,  626,  630,  430,  430,
  900.       430,  430,  430,  430,  430,  430,  314,  314,  314,  314,
  901.       314,  314,  314,  314,  277,  470,  320,  460,  460,  460,
  902.       711,  322,  323,  322,  322,  322,  322,  322,  322,  258,
  903.       571,   62,  487,  487,  487,   62,  462,  326,  326,  326,
  904.        62,  572,  407,  259,  135,  318,   62,  370,  135,  458,
  905.  
  906.       458,  458,  277,  135,  280,  370,  408,  318,  456,  135,
  907.       318,  318,  450,  450,  450,  450,  450,  450,  450,  450,
  908.       456,   82,  327,  456,  456,  884,   62,  471,   62,   62,
  909.       370,  403,  548,  318,  933,  456,  318,  369,  458,  458,
  910.       458,  135,  135,   82,   82,  370,  456,  130,  547,  456,
  911.       457,  457,  457,  457,  457,  457,  457,  457,   62,   62,
  912.       410,  470,  489,  489,  489,  350,  883,  431,  431,  431,
  913.       369,  135,  882,  350,  890,  371,  371,  371,  371,  371,
  914.       371,  371,  371,  109,  245,  245,  245,  246,  277,  109,
  915.       109,  109,  109,  109,   62,  863,  109,  109,  512,  512,
  916.  
  917.       512,  184,  330,  109,  109,  798,  667,  135,  465,  465,
  918.       465,  465,  465,  516,  516,  516,  622,  521,  407,  522,
  919.       522,  522,   62,  471,  489,  489,  489,  530,  277,  530,
  920.       109,  113,  408,  668,  456,  135,  881,  322,  322,  322,
  921.       322,  322,  322,  322,  322,  513,  456,  881,  541,  456,
  922.       456,   69,  277,  109,  109,  258,  879,  628,  520,  646,
  923.       524,  461,   71,  405,  405,  405,  277,  525,   73,  259,
  924.       520,  406,  456,  520,  520,  456,  526,  670,   77,  878,
  925.       537,  537,  537,  406,   79,  520,  406,  406,  486,  486,
  926.       486,  486,  486,  486,  486,  486,  520,   62,  406,  520,
  927.  
  928.       517,  491,   62,  134,  671,   62,  540,  540,  540,  406,
  929.       135,  135,  406,  258,  518,  135,  519,  877,  135,  407,
  930.       585,  363,  363,  363,  277,   62,   62,  259,  519,  260,
  931.       533,  519,  519,  408,  542,  520,  134,  407,  135,  135,
  932.       716,  260,   62,  519,  260,  260,   62,  520,  277,  549,
  933.       520,  520,  876,  520,  519,  135,  260,  519,  586,  135,
  934.       542,   62,  520,  717,  545,  520,  716,  260,  520,  520,
  935.       260,  434,  130,  520,  135,  277,  520,  538,  541,  435,
  936.       520,  549,  626,  586,  614,  523,  523,  523,  523,  523,
  937.       718,  520,  534,   62,  520,  546,  539,  539,  539,  539,
  938.  
  939.       539,  539,  539,  539,  434,  517,  135,   62,  277,  436,
  940.       436,  436,  436,  436,  436,  436,  436,   62,  258,  518,
  941.       135,  519,  615,  280,  407,  130,   62,  875,  277,   82,
  942.       135,  733,  259,  519,  318,  557,  519,  519,  408,  135,
  943.       520,  132,  550,  550,  550,   62,  318,  615,  519,  318,
  944.       318,   62,  520,  521,  637,  520,  520,  733,  135,  519,
  945.       874,  318,  519,  280,  135,  873,  277,  520,  543,  407,
  946.       588,  201,  318,  202,   62,  318,  277,  632,  520,  203,
  947.       637,  520,  452,  408,  277,  409,   62,  135,  517,  830,
  948.       453,  453,  453,  277,  132,  544,  454,  409,  455,  135,
  949.  
  950.       409,  409,  518,  873,  551,  677,  455,  556,  556,  556,
  951.       455,   62,  409,  455,  455,  640,  551,   62,  455,  551,
  952.       551,  455,  455,  409,  135,  455,  409,  587,  587,  587,
  953.       135,  551,  677,  455,  277,  628,  455,  638,  783,  455,
  954.       277,  626,  551,  660,  455,  551,  452,  455,  530,  277,
  955.       530,  517,  872,  277,  459,  459,  459,   62,  277,  552,
  956.       454,  130,  455,  783,  452,  518,  640,  551,   82,  277,
  957.       135,  647,  661,  553,  455,  554,  630,  455,  455,  551,
  958.       455,  277,  551,  551,  512,  512,  512,  554,  630,  455,
  959.       554,  554,  455,  277,  551,  455,  455,  277,  661,  277,
  960.  
  961.       455,  407,  554,  455,  277,  551,  703,  455,  551,  872,
  962.       552,  642,  577,  554,  871,  408,  554,  456,  455,  491,
  963.       863,  455,   62,   62,  553,  870,  554,  578,   82,  456,
  964.       132,  513,  456,  456,  608,  135,  135,   62,  554,  521,
  965.       589,  554,  554,  869,  456,  593,  540,  540,  540,  609,
  966.       135,  577,  578,  554,  590,  456,  591,   62,  456,  616,
  967.       594,  595,  628,   62,  554,  794,  632,  554,  591,  639,
  968.       135,  591,  591,  608,  609,  517,  135,  596,  618,  618,
  969.       618,  277,   62,  591,  517,  641,  909,  594,  595,  518,
  970.       794,  620,  277,  620,  591,  135,  737,  591,  701,  742,
  971.  
  972.       620,  869,  596,  620,   62,  620,  620,  620,  620,  620,
  973.        62,   62,  620,  621,  517,  620,  620,  135,  620,  806,
  974.       620,  277,  737,  135,  135,  619,  156,  620,  518,  620,
  975.       620,  620,  620,  589,  620,  635,  635,  635,  620,   62,
  976.       277,  620,  620,  662,  806,  620,  620,  590,  867,  636,
  977.       632,  867,  135,  157,   62,  662,  664,  620,  662,  662,
  978.       277,  636,  554,  688,  636,  636,  643,  135,  620,  676,
  979.       662,  620,   62,  277,  554,   62,  636,  554,  554,  552,
  980.       644,  662,  645,  677,  662,  135,  778,  636,  135,  554,
  981.       636,  749,  689,  277,  645,  554,  676,  645,  645,  643,
  982.  
  983.       554,   62,  862,  554,  618,  618,  618,  554,  677,  645,
  984.       554,  554,  589,  644,  135,  645,  807,  749,  689,   62,
  985.       645,  782,  554,  645,  824,   62,  590,  645,  662,  589,
  986.       645,  645,  135,  554,  698,  697,  554,  130,  135,   62,
  987.       662,  808,  645,  662,  662,  662,  805,  704,  782,  824,
  988.        62,  619,  135,  645,   62,  662,  645,  662,  130,  743,
  989.       662,  662,  702,  135,  767,   62,  662,  135,  746,  662,
  990.       207,  805,  662,  663,  699,  208,   62,  277,  135,   82,
  991.       864,  209,  210,  662,  211,  744,  662,  212,  700,  135,
  992.       767,  213,  861,  130,  752,  860,  778,  207,  743,  645,
  993.  
  994.       663,  699,  208,  779,  859,   62,  132,  209,  210,  854,
  995.       211,  645,  212,  700,  645,  645,  213,  236,  135,  751,
  996.       663,  752,  237,  853,  700,  745,  645,  132,  238,  239,
  997.       277,  211,  853,  752,  240,  823,  694,  645,  241,  277,
  998.       645,  850,  849,  912,  236,  643,  751,  663,  277,  237,
  999.       695,  700,  696,  789,  238,  239,  789,  211,  752,  240,
  1000.       823,  645,  132,  241,  696,  790,  848,  696,  696,  277,
  1001.       696,  769,   82,  645,  894,  694,  645,  645,  594,  696,
  1002.       789,  847,  696,  789,  846,  696,  696,  768,  645,  801,
  1003.       696,  696,  791,  696,  277,  596,  751,  696,  769,  645,
  1004.  
  1005.       894,  769,  645,  696,  804,  594,  696,  696,  696,  130,
  1006.       752,  696,  132,  768,  768,  916,  802,  845,  696,  803,
  1007.       596,  800,  809,  751,  818,  805,  769,  769,  903,  696,
  1008.       789,  804,  696,  761,  761,  752,  761,  761,  761,  761,
  1009.       768,  761,  761,  761,  761,  825,  761,  761,  800,  810,
  1010.       805,  819,  769,  761,  761,  761,  813,  789,  837,  839,
  1011.       130,  789,  763,  855,  844,  814,  277,  851,  843,  857,
  1012.       835,  822,  826,  789,  277,  789,  916,  130,  132,  916,
  1013.       761,  761,  761,  813,  271,  838,  840,  868,  789,  763,
  1014.       856,  815,  823,  800,  842,  831,  858,  277,  822,  841,
  1015.  
  1016.       789,  800,  789,  761,  761,  761,  761,  852,  761,  761,
  1017.       761,  761,  762,  761,  761,  761,  761,  823,  761,  761,
  1018.       800,  880,  832,  789,  800,  776,  761,  761,  800,  132,
  1019.       865,  789,  130,  130,  777,  277,  836,  914,  277,  130,
  1020.       834,  277,  892,  904,  833,  271,  132,  828,  931,  910,
  1021.       789,  800,  761,  761,  761,  827,  880,  277,  789,  916,
  1022.       916,  777,  800,  891,  914,  800,  821,  820,  800,  917,
  1023.       918,  817,  816,  812,  811,  761,  761,  761,  761,  796,
  1024.       761,  761,  761,  761,  800,  761,  761,  761,  761,  800,
  1025.       761,  761,  800,  891,  866,  800,  913,  761,  761,  761,
  1026.  
  1027.       795,  132,  132,  916,  916,  916,  763,  916,  132,  793,
  1028.       914,  800,  916,  919,  920,  921,  792,  922,  788,  787,
  1029.       916,  916,  923,  913,  761,  761,  761,  786,  271,  271,
  1030.       924,  925,  916,  763,  916,  914,  786,  785,  784,  781,
  1031.       780,  916,  926,  277,  927,  772,  771,  761,  761,  761,
  1032.       761,  928,  761,  761,  761,  761,  762,  761,  761,  761,
  1033.       761,  770,  761,  761,  736,  916,  736,  916,  766,  776,
  1034.       761,  761,  271,  271,  271,  929,  271,  930,  777,  766,
  1035.       765,  271,  765,  764,  764,  760,  760,  759,  758,  271,
  1036.       271,  757,  756,  755,  754,  753,  761,  761,  761,  715,
  1037.  
  1038.       715,  271,  750,  271,  748,  777,  748,  747,  747,  649,
  1039.       271,  277,  739,  738,  736,  734,  734,  732,  731,  761,
  1040.       761,  730,  729,  728,  727,  726,  726,  725,  724,  723,
  1041.       722,  721,  720,  719,  271,  666,  271,   62,  666,  664,
  1042.        62,  715,   62,   62,   63,   63,   63,   63,   63,  713,
  1043.        63,   63,   63,   63,   81,   81,   81,   81,   81,   81,
  1044.        81,   81,   81,   81,  112,  112,  112,  112,  112,  112,
  1045.       112,  112,  112,  112,  129,  129,  129,  129,  129,  129,
  1046.       129,  129,  129,  129,  134,  713,  712,  134,  134,  134,
  1047.       134,  183,  183,  183,  183,  183,  712,  183,  183,  183,
  1048.  
  1049.       183,  185,  185,  185,  185,  185,  185,  185,  185,  185,
  1050.       185,  200,  200,  710,  709,  708,  707,  706,  200,  200,
  1051.       109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
  1052.       247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
  1053.       130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
  1054.       274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
  1055.       276,  276,  276,  276,  276,  276,  276,  276,  276,  276,
  1056.       284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
  1057.       183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
  1058.       185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
  1059.  
  1060.       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
  1061.       332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
  1062.       336,  336,  705,  336,  336,  336,  336,  336,  336,  336,
  1063.       338,  338,  277,  338,  338,  338,  338,  338,  338,  338,
  1064.       396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
  1065.       109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
  1066.       398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
  1067.       247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
  1068.        81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
  1069.       464,  464,  464,  464,  691,  464,  464,  464,  464,  464,
  1070.  
  1071.       486,  486,  690,  486,  514,  514,  514,  514,  514,  514,
  1072.       514,  514,  514,  514,  529,  529,  529,  529,  529,  529,
  1073.       529,  529,  529,  529,  559,  559,  273,  559,  559,  559,
  1074.       559,  559,  559,  559,  561,  561,  621,  561,  561,  561,
  1075.       561,  561,  561,  561,  563,  563,  614,  563,  563,  563,
  1076.       563,  563,  563,  563,  565,  565,  687,  565,  565,  565,
  1077.       565,  565,  565,  565,  567,  567,  686,  567,  567,  567,
  1078.       567,  567,  567,  567,  569,  569,  685,  569,  569,  569,
  1079.       569,  569,  569,  569,  625,  625,  625,  625,  625,  625,
  1080.       625,  625,  625,  625,  627,  627,  627,  627,  627,  627,
  1081.  
  1082.       627,  627,  627,  627,  629,  629,  629,  629,  629,  629,
  1083.       629,  629,  629,  629,  631,  631,  631,  631,  631,  631,
  1084.       631,  631,  631,  631,  665,  665,  685,  665,  665,  665,
  1085.       665,  665,  665,  665,  714,  714,  684,  714,  714,  714,
  1086.       714,  714,  714,  714,  735,  735,  683,  735,  735,  735,
  1087.       735,  735,  735,  735,  762,  762,  682,  762,  762,  762,
  1088.       762,  762,  762,  762,  775,  775,  681,  775,  775,  775,
  1089.       775,  775,  775,  775,  761,  761,  680,  761,  761,  761,
  1090.       761,  761,  761,  761,  799,  799,  799,  799,  799,  799,
  1091.       799,  799,  799,  799,  885,  885,  885,  885,  885,  885,
  1092.  
  1093.       885,  885,  885,  885,  888,  888,  888,  888,  888,  888,
  1094.       888,  888,  888,  888,  915,  915,  915,  915,  915,  915,
  1095.       915,  915,  915,  915,  679,  678,  675,  674,  673,  672,
  1096.       669,  666,  664,  585,  659,  658,  657,  656,  655,  655,
  1097.       654,  653,  652,  651,  650,  649,  648,  570,  570,  568,
  1098.       568,  566,  566,  564,  564,  562,  562,  560,  560,  277,
  1099.       277,  277,  624,  623,  205,  198,  521,  621,  515,  616,
  1100.       613,  612,  611,  610,  607,  606,  605,  604,  603,  602,
  1101.       601,  601,  600,  599,  491,  588,  584,  583,  582,  581,
  1102.       580,  579,  576,  575,  574,  573,  473,  570,  568,  566,
  1103.  
  1104.       564,  562,  560,  187,  277,  528,  527,   66,  199,  521,
  1105.       410,  403,  515,  510,  510,  508,  507,  506,  505,  503,
  1106.       502,  501,  500,  499,  498,  497,  496,  199,  490,  490,
  1107.       488,  488,  484,  483,  482,  481,  480,  479,  477,  476,
  1108.       475,  474,  205,  205,  199,  198,  198,  198,  339,  339,
  1109.       337,  337,  187,  275,  277,  275,  416,  410,  403,  395,
  1110.       394,  383,  382,  381,  380,  379,  378,  378,  375,  375,
  1111.       374,  373,  372,  368,  348,  348,  347,  346,  345,  344,
  1112.       344,  343,  342,  341,  340,  339,  337,  330,  277,  275,
  1113.       273,  271,  199,  270,  113,  243,  242,  235,  234,  232,
  1114.  
  1115.       199,  230,  229,  228,  227,  227,  226,  225,  224,  223,
  1116.       222,  220,   82,  205,  204,  198,  199,  198,  192,  184,
  1117.       133,   82,   66,  933,    3,  933,  933,  933,  933,  933,
  1118.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1119.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1120.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1121.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1122.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1123.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1124.       933,  933,  933,  933,  933,  933,  933
  1125.  
  1126.     } ;
  1127.  
  1128. static const short int yy_chk[3598] =
  1129.     {   0,
  1130.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  1131.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  1132.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  1133.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  1134.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  1135.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  1136.         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  1137.         1,    1,    2,    2,    2,    2,    2,    2,    2,    2,
  1138.         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
  1139.         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
  1140.  
  1141.         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
  1142.         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
  1143.         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
  1144.         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
  1145.         2,    2,    2,    2,    6,    8,    8,    9,   14,   15,
  1146.        36,    6,    6,    6,    6,    6,    9,   32,    9,    9,
  1147.        16,  275,   32,   36,    9,   10,   10,   10,   29,  275,
  1148.        29,   10,   29,  931,   15,   14,   10,   10,   10,   10,
  1149.        10,   10,   10,   10,   10,   18,   16,   10,   10,   10,
  1150.        10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
  1151.  
  1152.        10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
  1153.        10,   17,   18,   19,   10,   10,   10,   10,   10,   10,
  1154.        10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
  1155.        10,   10,   10,   10,   11,   11,   11,   22,   19,   20,
  1156.        40,   40,   17,   21,   31,   66,   11,  138,   11,   11,
  1157.        11,   11,   11,   30,   33,   59,   30,   11,   30,   31,
  1158.        59,  138,   22,   31,   23,   31,   11,   21,   17,   11,
  1159.        31,   11,   11,   11,   21,   20,   20,   20,   20,   20,
  1160.        20,   20,   20,   11,   11,   11,   11,   11,   11,   11,
  1161.        11,   23,   11,  908,   21,   11,   27,   11,   11,   13,
  1162.  
  1163.        21,   54,   56,  129,   56,   33,   56,   66,   13,   69,
  1164.        13,   69,   13,   13,   13,   28,   13,   69,   23,   27,
  1165.        34,   64,   64,   27,   54,  455,   28,   28,   54,   28,
  1166.        13,   42,  455,   34,   34,   34,   34,   34,   70,   70,
  1167.        28,   13,   43,   77,   42,   77,   13,   13,   13,   13,
  1168.        13,   13,   13,   13,   42,   43,   13,   24,   24,   24,
  1169.        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
  1170.        24,   24,  129,   39,  906,   43,   37,   24,   24,   24,
  1171.        37,   42,   39,   44,   39,   37,   45,   37,   37,   34,
  1172.        39,   49,  633,   37,   47,   50,   44,   46,   57,   47,
  1173.  
  1174.        43,   57,  246,   57,   24,   24,   24,   47,   50,  277,
  1175.        46,  277,   44,   46,  346,   49,  346,   45,  111,   74,
  1176.        74,   74,   49,  905,   47,  902,   58,   24,   24,   25,
  1177.        50,   74,   51,   25,   25,   25,   51,   25,   44,   55,
  1178.        46,   58,   49,   45,  633,   58,  246,   58,   49,   51,
  1179.        55,   55,   58,   55,  111,   50,   89,   89,   89,   51,
  1180.       143,  143,   25,  693,   55,  183,  183,   25,   25,   25,
  1181.        25,   25,   25,   25,   25,   26,  101,  101,  101,   26,
  1182.        26,   26,  207,   26,   65,   60,   51,  118,  118,  118,
  1183.        60,   65,   65,   65,   65,   65,   65,  210,   60,   84,
  1184.  
  1185.        84,   84,   84,   84,   84,   84,   84,  207,   26,  125,
  1186.       125,  125,  134,   26,   26,   26,   26,   26,   26,   26,
  1187.        26,   38,   38,   38,  210,  134,  901,   38,  693,  141,
  1188.       184,  184,   38,   38,   38,   38,   38,   38,   38,   38,
  1189.        38,   60,  141,   38,   38,   38,   38,   38,   38,   38,
  1190.        38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
  1191.        38,   38,   38,   38,   38,   38,   38,  103,  103,  103,
  1192.        38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
  1193.        38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
  1194.        41,  126,  126,  126,   41,  142,   61,  185,  185,   41,
  1195.  
  1196.       899,   41,  208,   41,   41,   41,   61,   41,  142,   61,
  1197.        61,   61,   61,   61,   75,   75,   75,  103,  148,  148,
  1198.       148,   41,  136,  187,  187,   75,   75,   75,  208,  126,
  1199.       136,  136,   41,   75,  209,  136,  131,   41,   41,   41,
  1200.        41,   41,   41,   41,   41,  344,  147,   41,   48,  131,
  1201.       131,  131,  131,  131,  131,   48,  178,  178,  178,  147,
  1202.       209,   48,  147,  281,  281,   61,   85,   85,   85,   85,
  1203.        85,   85,   85,   85,   87,   87,   87,   87,   87,   87,
  1204.        87,   87,  114,  114,  114,  114,  114,  114,  114,  114,
  1205.       152,   48,   48,   48,   48,   48,   48,   48,   48,   52,
  1206.  
  1207.       214,  214,  214,  152,   52,  131,  152,  344,   52,   52,
  1208.        52,  536,   52,  116,  116,  116,  116,  116,  116,  116,
  1209.       116,  117,  117,  117,  117,  117,  117,  117,  117,  120,
  1210.       120,  120,  120,  120,  120,  120,  120,   52,  149,  151,
  1211.       154,  898,   52,   52,   52,   52,   52,   52,   52,   52,
  1212.        53,  149,  151,  154,   53,   53,   53,  236,   53,  122,
  1213.       122,  122,  122,  122,  122,  122,  122,  123,  123,  123,
  1214.       123,  123,  123,  123,  123,  536,  154,  237,  211,  283,
  1215.       283,  149,  236,   53,  150,  244,  151,  153,   53,   53,
  1216.        53,   53,   53,   53,   53,   53,   83,  150,  137,  355,
  1217.  
  1218.       153,   83,  156,  237,  150,  211,  137,   83,   83,  144,
  1219.        83,  137,  139,   83,  146,  156,  155,   83,  157,  158,
  1220.       139,  244,  144,   83,  355,  139,  165,  161,   83,  155,
  1221.       153,  157,  158,   83,   83,  160,   83,  156,   83,  165,
  1222.       161,  897,   83,   86,  160,  160,  160,  212,  160,  158,
  1223.       165,   86,  144,  144,  144,  144,  144,  144,  144,  144,
  1224.       159,  161,  146,  146,  146,  146,  146,  146,  146,  146,
  1225.       162,  162,  162,  159,  212,  398,   86,  155,  157,  163,
  1226.       164,   86,   86,   86,   86,   86,   86,   86,   86,  106,
  1227.       159,  239,  163,  164,  106,  163,  206,  396,  171,  238,
  1228.  
  1229.       106,  106,  166,  106,  896,  206,  106,  171,  171,  171,
  1230.       106,  171,  895,  206,  888,  166,  106,  167,  239,  398,
  1231.       162,  106,  169,  164,  182,  238,  106,  106,  348,  106,
  1232.       167,  106,  240,  396,  182,  106,  110,  110,  110,  110,
  1233.       110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
  1234.       110,  284,  284,  166,  887,  170,  110,  110,  110,  240,
  1235.       167,  167,  167,  167,  167,  167,  167,  167,  170,  280,
  1236.       169,  169,  169,  169,  169,  169,  169,  169,  179,  215,
  1237.       215,  215,  280,  110,  110,  110,  175,  179,  179,  179,
  1238.       348,  179,  885,  182,  218,  218,  218,  884,  170,  170,
  1239.  
  1240.       170,  170,  170,  170,  170,  170,  110,  110,  112,  112,
  1241.       112,  112,  112,  309,  112,  112,  112,  112,  112,  173,
  1242.       180,  112,  112,  331,  331,  179,  309,  279,  112,  112,
  1243.       181,  279,  173,  180,  175,  175,  175,  175,  175,  175,
  1244.       175,  175,  216,  181,  279,  213,  219,  219,  219,  227,
  1245.       216,  213,  254,  254,  254,  112,  112,  176,  264,  264,
  1246.       264,  397,  173,  173,  173,  173,  173,  173,  173,  173,
  1247.       176,  227,  213,  309,  298,  216,  180,  213,  112,  112,
  1248.       115,  883,  241,  882,  115,  879,  181,  298,  241,  266,
  1249.       266,  266,  115,  878,  115,  877,  115,  397,  227,  286,
  1250.  
  1251.       176,  176,  176,  176,  176,  176,  176,  176,  115,  241,
  1252.       273,  115,  115,  876,  241,  273,  273,  115,  245,  245,
  1253.       245,  245,  115,  115,  115,  115,  115,  115,  115,  115,
  1254.       332,  332,  188,  188,  115,  634,  298,  115,  119,  188,
  1255.       188,  188,  188,  188,  188,  425,  119,  119,  119,  189,
  1256.       189,  425,  119,  286,  119,  255,  189,  189,  189,  189,
  1257.       189,  286,  255,  255,  255,  245,  119,  465,  465,  119,
  1258.       119,  217,  217,  217,  217,  217,  217,  217,  217,  265,
  1259.       294,  119,  267,  267,  267,  249,  265,  265,  265,  248,
  1260.       797,  634,  119,  294,  282,  119,  121,  249,  282,  269,
  1261.  
  1262.       249,  249,  388,  248,  121,  248,  269,  269,  269,  278,
  1263.       875,  282,  249,  425,  278,  292,  288,  248,  305,  362,
  1264.       248,  248,  278,  249,  288,  294,  249,  388,  292,  121,
  1265.       428,  305,  248,  292,  121,  121,  121,  121,  121,  121,
  1266.       121,  121,  124,  248,  287,  362,  248,  511,  797,  288,
  1267.       124,  124,  124,  287,  287,  287,  124,  287,  124,  250,
  1268.       250,  250,  250,  250,  250,  250,  250,  692,  692,  305,
  1269.       124,  376,  291,  124,  124,  251,  251,  251,  251,  251,
  1270.       251,  251,  251,  511,  290,  124,  291,  291,  291,  535,
  1271.       300,  428,  258,  290,  290,  290,  124,  290,  376,  124,
  1272.  
  1273.       140,  140,  140,  300,  258,  874,  741,  258,  258,  297,
  1274.       300,  272,  140,  140,  140,  140,  140,  140,  140,  258,
  1275.       577,  296,  297,  140,  272,  272,  272,  272,  272,  295,
  1276.       258,  302,  140,  258,  296,  140,  302,  140,  140,  140,
  1277.       873,  252,  295,  259,  302,  577,  297,  295,  535,  140,
  1278.       140,  140,  140,  140,  140,  140,  140,  252,  140,  259,
  1279.       608,  140,  741,  140,  140,  145,  296,  329,  350,  252,
  1280.       145,  259,  252,  252,  259,  259,  393,  329,  145,  427,
  1281.       272,  350,  871,  304,  252,  608,  259,  262,  262,  262,
  1282.       262,  262,  262,  262,  262,  252,  304,  259,  252,  377,
  1283.  
  1284.       259,  773,  393,  145,  306,  870,  308,  304,  145,  145,
  1285.       145,  145,  145,  145,  145,  145,  168,  306,  299,  308,
  1286.       168,  301,  299,  257,  490,  307,  377,  427,  168,  429,
  1287.       168,  306,  168,  740,  301,  299,  329,  257,  307,  257,
  1288.       299,  308,  429,  313,  168,  313,  375,  168,  168,  493,
  1289.       490,  257,  863,  168,  257,  257,  313,  773,  168,  168,
  1290.       168,  168,  168,  168,  168,  168,  257,  299,  301,  318,
  1291.       168,  318,  862,  168,  172,  172,  493,  257,  307,  375,
  1292.       257,  592,  318,  172,  172,  172,  740,  172,  268,  172,
  1293.       861,  172,  263,  263,  263,  263,  263,  263,  263,  263,
  1294.  
  1295.       289,  314,  268,  172,  268,  375,  172,  172,  592,  860,
  1296.       314,  314,  314,  311,  314,  431,  268,  433,  172,  268,
  1297.       268,  319,  319,  319,  442,  315,  311,  315,  431,  172,
  1298.       433,  268,  172,  174,  315,  315,  315,  442,  315,  531,
  1299.       533,  174,  268,  433,  654,  268,  531,  533,  289,  289,
  1300.       289,  289,  289,  289,  289,  289,  311,  311,  311,  311,
  1301.       311,  311,  311,  311,  312,  706,  174,  325,  325,  325,
  1302.       654,  174,  174,  174,  174,  174,  174,  174,  174,  177,
  1303.       473,  328,  365,  365,  365,  447,  328,  177,  177,  177,
  1304.       322,  473,  317,  177,  328,  177,  424,  364,  447,  322,
  1305.  
  1306.       322,  322,  321,  322,  424,  364,  317,  177,  317,  424,
  1307.       177,  177,  312,  312,  312,  312,  312,  312,  312,  312,
  1308.       317,  864,  177,  317,  317,  859,  369,  706,  446,  323,
  1309.       364,  323,  447,  177,  369,  317,  177,  221,  323,  323,
  1310.       323,  446,  323,  829,  774,  221,  317,  523,  446,  317,
  1311.       321,  321,  321,  321,  321,  321,  321,  321,  327,  369,
  1312.       327,  349,  371,  371,  371,  349,  858,  327,  327,  327,
  1313.       221,  327,  857,  349,  864,  221,  221,  221,  221,  221,
  1314.       221,  221,  221,  247,  247,  247,  247,  247,  532,  247,
  1315.       247,  247,  247,  247,  320,  829,  247,  247,  399,  399,
  1316.  
  1317.       399,  335,  335,  247,  247,  774,  594,  320,  335,  335,
  1318.       335,  335,  335,  402,  402,  402,  523,  415,  326,  411,
  1319.       411,  411,  438,  349,  415,  415,  415,  423,  423,  423,
  1320.       247,  247,  326,  594,  326,  438,  856,  320,  320,  320,
  1321.       320,  320,  320,  320,  320,  399,  326,  855,  438,  326,
  1322.       326,  419,  554,  247,  247,  256,  850,  532,  407,  554,
  1323.       419,  326,  419,  256,  256,  256,  430,  420,  419,  256,
  1324.       407,  256,  326,  407,  407,  326,  420,  596,  420,  849,
  1325.       430,  430,  430,  256,  420,  407,  256,  256,  370,  370,
  1326.       370,  370,  370,  370,  370,  370,  407,  436,  256,  407,
  1327.  
  1328.       404,  440,  449,  434,  596,  440,  436,  436,  436,  256,
  1329.       436,  434,  256,  261,  404,  449,  404,  848,  440,  405,
  1330.       485,  261,  261,  261,  426,  437,  439,  261,  404,  261,
  1331.       426,  404,  404,  405,  440,  405,  434,  408,  437,  439,
  1332.       661,  261,  444,  404,  261,  261,  445,  405,  435,  449,
  1333.       405,  405,  847,  408,  404,  444,  261,  404,  485,  445,
  1334.       440,  448,  405,  663,  444,  408,  661,  261,  408,  408,
  1335.       261,  293,  417,  405,  448,  625,  405,  437,  439,  293,
  1336.       408,  448,  625,  485,  509,  417,  417,  417,  417,  417,
  1337.       663,  408,  426,  443,  408,  445,  435,  435,  435,  435,
  1338.  
  1339.       435,  435,  435,  435,  293,  412,  443,  462,  534,  293,
  1340.       293,  293,  293,  293,  293,  293,  293,  310,  310,  412,
  1341.       462,  412,  509,  443,  413,  463,  541,  846,  450,  798,
  1342.       310,  684,  310,  412,  310,  463,  412,  412,  413,  541,
  1343.       413,  417,  450,  450,  450,  441,  310,  509,  412,  310,
  1344.       310,  456,  413,  456,  541,  413,  413,  684,  441,  412,
  1345.       845,  310,  412,  462,  456,  844,  627,  413,  441,  414,
  1346.       538,  525,  310,  525,  538,  310,  316,  534,  413,  525,
  1347.       541,  413,  316,  414,  452,  414,  545,  538,  451,  798,
  1348.       316,  316,  316,  457,  463,  441,  316,  414,  316,  545,
  1349.  
  1350.       414,  414,  451,  843,  451,  676,  452,  457,  457,  457,
  1351.       316,  546,  414,  316,  316,  545,  451,  543,  452,  451,
  1352.       451,  452,  452,  414,  546,  316,  414,  486,  486,  486,
  1353.       543,  451,  676,  452,  626,  627,  316,  543,  753,  316,
  1354.       324,  626,  451,  585,  452,  451,  324,  452,  530,  530,
  1355.       530,  458,  842,  453,  324,  324,  324,  548,  454,  453,
  1356.       324,  557,  324,  753,  454,  458,  546,  458,  909,  629,
  1357.       548,  557,  585,  453,  324,  453,  629,  324,  324,  458,
  1358.       454,  630,  458,  458,  512,  512,  512,  453,  630,  324,
  1359.       453,  453,  454,  628,  458,  454,  454,  631,  585,  645,
  1360.  
  1361.       324,  460,  453,  324,  459,  458,  645,  454,  458,  841,
  1362.       459,  548,  478,  453,  840,  460,  453,  460,  454,  542,
  1363.       909,  454,  544,  542,  459,  839,  459,  478,  903,  460,
  1364.       557,  512,  460,  460,  504,  544,  542,  461,  459,  461,
  1365.       489,  459,  459,  838,  460,  491,  461,  461,  461,  504,
  1366.       461,  478,  478,  459,  489,  460,  489,  547,  460,  549,
  1367.       491,  491,  628,  549,  459,  770,  631,  459,  489,  544,
  1368.       547,  489,  489,  504,  504,  516,  549,  491,  515,  515,
  1369.       515,  632,  641,  489,  518,  547,  903,  491,  491,  516,
  1370.       770,  516,  696,  517,  489,  641,  689,  489,  641,  696,
  1371.  
  1372.       518,  837,  491,  516,  700,  517,  516,  516,  517,  517,
  1373.       637,  551,  518,  551,  522,  518,  518,  700,  516,  781,
  1374.       517,  539,  689,  637,  551,  515,  637,  518,  522,  516,
  1375.       522,  517,  516,  540,  517,  539,  539,  539,  518,  745,
  1376.       552,  518,  522,  589,  781,  522,  522,  540,  834,  540,
  1377.       632,  833,  745,  637,  636,  589,  636,  522,  589,  589,
  1378.       550,  540,  552,  614,  540,  540,  550,  636,  522,  601,
  1379.       589,  522,  778,  553,  552,  639,  540,  552,  552,  553,
  1380.       550,  589,  550,  601,  589,  778,  745,  540,  639,  552,
  1381.       540,  711,  614,  556,  550,  553,  601,  550,  550,  556,
  1382.  
  1383.       552,  638,  828,  552,  618,  618,  618,  553,  601,  550,
  1384.       553,  553,  587,  556,  638,  556,  782,  711,  614,  642,
  1385.       550,  750,  553,  550,  793,  697,  587,  556,  587,  590,
  1386.       556,  556,  642,  553,  639,  638,  553,  647,  697,  698,
  1387.       587,  782,  556,  587,  587,  590,  836,  647,  750,  793,
  1388.       701,  618,  698,  556,  640,  587,  556,  590,  704,  697,
  1389.       590,  590,  642,  701,  733,  702,  587,  640,  704,  587,
  1390.       588,  836,  590,  588,  640,  588,  744,  643,  702,  830,
  1391.       830,  588,  588,  590,  588,  701,  590,  588,  640,  744,
  1392.       733,  588,  827,  746,  751,  826,  744,  588,  698,  643,
  1393.  
  1394.       588,  640,  588,  746,  825,  699,  647,  588,  588,  822,
  1395.       588,  643,  588,  640,  643,  643,  588,  616,  699,  713,
  1396.       616,  751,  616,  821,  699,  702,  643,  704,  616,  616,
  1397.       635,  616,  820,  713,  616,  854,  635,  643,  616,  644,
  1398.       643,  817,  816,  910,  616,  644,  713,  616,  694,  616,
  1399.       635,  699,  635,  760,  616,  616,  761,  616,  713,  616,
  1400.       854,  644,  746,  616,  635,  763,  815,  635,  635,  695,
  1401.       694,  768,  890,  644,  872,  695,  644,  644,  721,  635,
  1402.       760,  814,  694,  761,  812,  694,  694,  734,  644,  777,
  1403.       635,  695,  763,  635,  776,  721,  748,  694,  768,  644,
  1404.  
  1405.       872,  734,  644,  695,  780,  721,  695,  695,  694,  779,
  1406.       748,  694,  910,  766,  734,  912,  777,  811,  695,  779,
  1407.       721,  776,  783,  748,  789,  780,  734,  766,  890,  695,
  1408.       789,  780,  695,  726,  726,  748,  726,  726,  726,  726,
  1409.       766,  726,  726,  726,  726,  794,  726,  726,  776,  783,
  1410.       780,  789,  766,  726,  726,  726,  786,  789,  805,  806,
  1411.       803,  818,  726,  823,  810,  786,  799,  818,  809,  824,
  1412.       803,  792,  794,  880,  800,  819,  915,  835,  779,  930,
  1413.       726,  726,  726,  786,  912,  805,  806,  835,  818,  726,
  1414.       823,  786,  792,  799,  808,  800,  824,  831,  792,  807,
  1415.  
  1416.       880,  800,  819,  726,  726,  743,  743,  819,  743,  743,
  1417.       743,  743,  743,  743,  743,  743,  743,  792,  743,  743,
  1418.       799,  851,  800,  851,  831,  743,  743,  743,  800,  803,
  1419.       831,  852,  868,  892,  743,  832,  804,  913,  865,  904,
  1420.       802,  866,  868,  892,  801,  915,  835,  796,  930,  904,
  1421.       851,  831,  743,  743,  743,  795,  852,  891,  852,  916,
  1422.       917,  743,  832,  865,  913,  865,  791,  790,  866,  916,
  1423.       917,  788,  787,  785,  784,  743,  743,  762,  762,  772,
  1424.       762,  762,  762,  762,  891,  762,  762,  762,  762,  832,
  1425.       762,  762,  865,  866,  832,  866,  911,  762,  762,  762,
  1426.  
  1427.       771,  868,  892,  918,  919,  920,  762,  921,  904,  767,
  1428.       911,  891,  922,  918,  919,  920,  765,  921,  759,  758,
  1429.       923,  924,  922,  911,  762,  762,  762,  757,  916,  917,
  1430.       923,  924,  925,  762,  926,  911,  756,  755,  754,  749,
  1431.       747,  927,  925,  742,  926,  739,  738,  762,  762,  775,
  1432.       775,  927,  775,  775,  775,  775,  775,  775,  775,  775,
  1433.       775,  737,  775,  775,  736,  928,  735,  929,  732,  775,
  1434.       775,  775,  918,  919,  920,  928,  921,  929,  775,  731,
  1435.       730,  922,  729,  728,  727,  725,  724,  723,  722,  923,
  1436.       924,  720,  719,  718,  717,  716,  775,  775,  775,  715,
  1437.  
  1438.       714,  925,  712,  926,  710,  775,  709,  708,  707,  705,
  1439.       927,  703,  691,  690,  688,  687,  686,  683,  682,  775,
  1440.       775,  681,  680,  679,  678,  675,  674,  673,  672,  671,
  1441.       670,  669,  668,  667,  928,  666,  929,  934,  665,  662,
  1442.       934,  660,  934,  934,  935,  935,  935,  935,  935,  659,
  1443.       935,  935,  935,  935,  936,  936,  936,  936,  936,  936,
  1444.       936,  936,  936,  936,  937,  937,  937,  937,  937,  937,
  1445.       937,  937,  937,  937,  938,  938,  938,  938,  938,  938,
  1446.       938,  938,  938,  938,  939,  658,  657,  939,  939,  939,
  1447.       939,  940,  940,  940,  940,  940,  656,  940,  940,  940,
  1448.  
  1449.       940,  941,  941,  941,  941,  941,  941,  941,  941,  941,
  1450.       941,  942,  942,  653,  652,  651,  650,  649,  942,  942,
  1451.       943,  943,  943,  943,  943,  943,  943,  943,  943,  943,
  1452.       944,  944,  944,  944,  944,  944,  944,  944,  944,  944,
  1453.       945,  945,  945,  945,  945,  945,  945,  945,  945,  945,
  1454.       946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
  1455.       947,  947,  947,  947,  947,  947,  947,  947,  947,  947,
  1456.       948,  948,  948,  948,  948,  948,  948,  948,  948,  948,
  1457.       949,  949,  949,  949,  949,  949,  949,  949,  949,  949,
  1458.       950,  950,  950,  950,  950,  950,  950,  950,  950,  950,
  1459.  
  1460.       951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
  1461.       952,  952,  952,  952,  952,  952,  952,  952,  952,  952,
  1462.       953,  953,  648,  953,  953,  953,  953,  953,  953,  953,
  1463.       954,  954,  646,  954,  954,  954,  954,  954,  954,  954,
  1464.       955,  955,  955,  955,  955,  955,  955,  955,  955,  955,
  1465.       956,  956,  956,  956,  956,  956,  956,  956,  956,  956,
  1466.       957,  957,  957,  957,  957,  957,  957,  957,  957,  957,
  1467.       958,  958,  958,  958,  958,  958,  958,  958,  958,  958,
  1468.       959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
  1469.       960,  960,  960,  960,  624,  960,  960,  960,  960,  960,
  1470.  
  1471.       961,  961,  623,  961,  962,  962,  962,  962,  962,  962,
  1472.       962,  962,  962,  962,  963,  963,  963,  963,  963,  963,
  1473.       963,  963,  963,  963,  964,  964,  622,  964,  964,  964,
  1474.       964,  964,  964,  964,  965,  965,  620,  965,  965,  965,
  1475.       965,  965,  965,  965,  966,  966,  615,  966,  966,  966,
  1476.       966,  966,  966,  966,  967,  967,  613,  967,  967,  967,
  1477.       967,  967,  967,  967,  968,  968,  612,  968,  968,  968,
  1478.       968,  968,  968,  968,  969,  969,  611,  969,  969,  969,
  1479.       969,  969,  969,  969,  970,  970,  970,  970,  970,  970,
  1480.       970,  970,  970,  970,  971,  971,  971,  971,  971,  971,
  1481.  
  1482.       971,  971,  971,  971,  972,  972,  972,  972,  972,  972,
  1483.       972,  972,  972,  972,  973,  973,  973,  973,  973,  973,
  1484.       973,  973,  973,  973,  974,  974,  610,  974,  974,  974,
  1485.       974,  974,  974,  974,  975,  975,  609,  975,  975,  975,
  1486.       975,  975,  975,  975,  976,  976,  607,  976,  976,  976,
  1487.       976,  976,  976,  976,  977,  977,  606,  977,  977,  977,
  1488.       977,  977,  977,  977,  978,  978,  605,  978,  978,  978,
  1489.       978,  978,  978,  978,  979,  979,  604,  979,  979,  979,
  1490.       979,  979,  979,  979,  980,  980,  980,  980,  980,  980,
  1491.       980,  980,  980,  980,  981,  981,  981,  981,  981,  981,
  1492.  
  1493.       981,  981,  981,  981,  982,  982,  982,  982,  982,  982,
  1494.       982,  982,  982,  982,  983,  983,  983,  983,  983,  983,
  1495.       983,  983,  983,  983,  603,  602,  600,  599,  598,  597,
  1496.       595,  593,  591,  586,  584,  583,  582,  581,  580,  579,
  1497.       578,  576,  575,  574,  573,  572,  571,  570,  569,  568,
  1498.       567,  566,  565,  564,  563,  562,  561,  560,  559,  555,
  1499.       537,  529,  528,  527,  526,  524,  520,  519,  514,  510,
  1500.       508,  507,  506,  505,  503,  502,  501,  500,  499,  498,
  1501.       497,  496,  495,  494,  492,  488,  484,  483,  482,  481,
  1502.       480,  479,  477,  476,  475,  474,  472,  471,  470,  469,
  1503.  
  1504.       468,  467,  466,  464,  432,  422,  421,  418,  416,  409,
  1505.       406,  401,  400,  395,  394,  392,  391,  390,  389,  387,
  1506.       386,  385,  384,  383,  382,  381,  380,  379,  374,  373,
  1507.       372,  368,  361,  360,  359,  358,  357,  356,  354,  353,
  1508.       352,  351,  347,  345,  343,  342,  341,  340,  339,  338,
  1509.       337,  336,  333,  285,  276,  274,  270,  260,  253,  243,
  1510.       242,  235,  234,  233,  232,  230,  229,  228,  226,  225,
  1511.       224,  223,  222,  220,  205,  204,  203,  202,  201,  198,
  1512.       197,  196,  195,  194,  193,  191,  190,  186,  135,  133,
  1513.       132,  130,  128,  127,  109,  108,  107,  105,  104,  102,
  1514.  
  1515.       100,   99,   98,   97,   96,   95,   94,   93,   92,   91,
  1516.        90,   88,   81,   79,   76,   73,   72,   71,   68,   63,
  1517.        35,   12,    7,    3,  933,  933,  933,  933,  933,  933,
  1518.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1519.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1520.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1521.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1522.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1523.       933,  933,  933,  933,  933,  933,  933,  933,  933,  933,
  1524.       933,  933,  933,  933,  933,  933,  933
  1525.  
  1526.     } ;
  1527.  
  1528. static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
  1529. static char *yy_full_match;
  1530. static int yy_lp;
  1531. static int yy_looking_for_trail_begin = 0;
  1532. static int yy_full_lp;
  1533. static int *yy_full_state;
  1534. #define YY_TRAILING_MASK 0x2000
  1535. #define YY_TRAILING_HEAD_MASK 0x4000
  1536. #define REJECT \
  1537. { \
  1538. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
  1539. yy_cp = yy_full_match; /* restore poss. backed-over text */ \
  1540. yy_lp = yy_full_lp; /* restore orig. accepting pos. */ \
  1541. yy_state_ptr = yy_full_state; /* restore orig. state */ \
  1542. yy_current_state = *yy_state_ptr; /* restore curr. state */ \
  1543. ++yy_lp; \
  1544. goto find_rule; \
  1545. }
  1546. #define yymore() yymore_used_but_not_detected
  1547. #define YY_MORE_ADJ 0
  1548. char *yytext;
  1549. # line 1 "../parser.l"
  1550. # line 8 "../parser.l"
  1551. /*
  1552.  * parser.l -- lex parser of algebraic chess moves for XBoard
  1553.  * $Id: parser.l,v 1.27 1995/07/28 05:23:42 mann Exp $
  1554.  *
  1555.  * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
  1556.  * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
  1557.  *
  1558.  * The following terms apply to Digital Equipment Corporation's copyright
  1559.  * interest in XBoard:
  1560.  * ------------------------------------------------------------------------
  1561.  * All Rights Reserved
  1562.  *
  1563.  * Permission to use, copy, modify, and distribute this software and its
  1564.  * documentation for any purpose and without fee is hereby granted,
  1565.  * provided that the above copyright notice appear in all copies and that
  1566.  * both that copyright notice and this permission notice appear in
  1567.  * supporting documentation, and that the name of Digital not be
  1568.  * used in advertising or publicity pertaining to distribution of the
  1569.  * software without specific, written prior permission.
  1570.  *
  1571.  * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  1572.  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
  1573.  * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  1574.  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  1575.  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  1576.  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  1577.  * SOFTWARE.
  1578.  * ------------------------------------------------------------------------
  1579.  *
  1580.  * The following terms apply to the enhanced version of XBoard distributed
  1581.  * by the Free Software Foundation:
  1582.  * ------------------------------------------------------------------------
  1583.  * This program is free software; you can redistribute it and/or modify
  1584.  * it under the terms of the GNU General Public License as published by
  1585.  * the Free Software Foundation; either version 2 of the License, or
  1586.  * (at your option) any later version.
  1587.  *
  1588.  * This program is distributed in the hope that it will be useful,
  1589.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  1590.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1591.  * GNU General Public License for more details.
  1592.  *
  1593.  * You should have received a copy of the GNU General Public License
  1594.  * along with this program; if not, write to the Free Software
  1595.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  1596.  * ------------------------------------------------------------------------
  1597.  */
  1598.  
  1599. /* This parser handles all forms of promotion.
  1600.  * The parser resolves ambiguous moves by searching and check-testing.
  1601.  * It also parses comments of the form [anything] or (anything).
  1602.  */
  1603.  
  1604. #include <config.h>
  1605.  
  1606. #define NO_CONSTRAINT    -1
  1607. #undef YYLMAX
  1608. #define YYLMAX            4096
  1609. #define UNPUT_BUF_SIZE        YYLMAX
  1610.  
  1611. #ifdef FLEX_SCANNER
  1612. /* typeof(yytext) == "char *" */
  1613. /* yy_text is set in YY_DECL below */
  1614. char *yy_text;
  1615. #else /*!FLEX_SCANNER*/
  1616. /* typeof(yytext) == "char []" */
  1617. char *yy_text = (char *) yytext;
  1618. #endif
  1619.  
  1620. #ifdef FLEX_SCANNER
  1621. /* This is flex */
  1622. #undef YY_INPUT
  1623. #define YY_INPUT(buf, result, max_size) my_yy_input(buf, &result, max_size)
  1624. #undef YY_DECL
  1625. #define YY_DECL                     \
  1626.     int _yylex YY_PROTO((void));    \
  1627.     int yylex YY_PROTO((void))      \
  1628.     {                               \
  1629.     int result = _yylex();      \
  1630.     yy_text = (char *) yytext;  \
  1631.     return(result);             \
  1632.     }                               \
  1633.     int _yylex YY_PROTO((void))
  1634. #else
  1635. /* This is lex */
  1636. #undef input
  1637. #undef output
  1638. #undef unput
  1639. #endif
  1640.  
  1641. /* The includes must be here, below the #undef input */
  1642.  
  1643. #include <ctype.h>
  1644.  
  1645. # if HAVE_STRING_H
  1646. #  include <string.h>
  1647. # else /* not HAVE_STRING_H */
  1648. #  include <strings.h>
  1649. # endif /* not HAVE_STRING_H */
  1650.  
  1651. #if HAVE_UNISTD_H
  1652. # include <unistd.h>
  1653. #endif
  1654.  
  1655. #if defined(_amigados)
  1656. # include <errno.h>
  1657. # if HAVE_FCNTL_H
  1658. #  include <fcntl.h>    /*  isatty() prototype  */
  1659. # endif /*  HAVE_FCNTL_H        */
  1660. #endif  /*  defined(_amigados)  */
  1661.  
  1662. #include "common.h"
  1663. #include "backend.h"
  1664. #include "frontend.h"
  1665. #include "parser.h"
  1666. #include "moves.h"
  1667.  
  1668. #define FakeFlags(index) \
  1669.     (((((index) % 2) == 0) ? F_WHITE_ON_MOVE : 0) | F_ALL_CASTLE_OK)
  1670.  
  1671. extern Board    boards[MAX_MOVES];
  1672. int        yyboardindex;
  1673. int             yyskipmoves = FALSE;
  1674. char        currentMoveString[YYLMAX];
  1675. #ifndef FLEX_SCANNER
  1676. char        unputBuffer[UNPUT_BUF_SIZE];
  1677. int        unputCount = 0;
  1678. #endif
  1679.  
  1680. #ifdef FLEX_SCANNER
  1681. void my_yy_input P((char *buf, int *result, int max_size));
  1682. #else /*!FLEX_SCANNER*/
  1683. static int input P((void));
  1684. static void output P((int ch));
  1685. static void unput P((int ch));
  1686. int yylook P((void));
  1687. int yyback P((int *, int));
  1688. #endif
  1689. #undef yywrap
  1690. int yywrap P((void));
  1691. extern void CopyBoard P((Board to, Board from));
  1692.  
  1693.  
  1694. /* Macros after this point can all be overridden by user definitions in
  1695.  * section 1.
  1696.  */
  1697.  
  1698. #ifdef YY_MALLOC_DECL
  1699. YY_MALLOC_DECL
  1700. #else
  1701. #if __STDC__
  1702. #ifndef __cplusplus
  1703. #include <stdlib.h>
  1704. #endif
  1705. #else
  1706. /* Just try to get by without declaring the routines.  This will fail
  1707.  * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
  1708.  * or sizeof(void*) != sizeof(int).
  1709.  */
  1710. #endif
  1711. #endif
  1712.  
  1713. /* Amount of stuff to slurp up with each read. */
  1714. #ifndef YY_READ_BUF_SIZE
  1715. #define YY_READ_BUF_SIZE 8192
  1716. #endif
  1717.  
  1718. /* Copy whatever the last rule matched to the standard output. */
  1719.  
  1720. #ifndef ECHO
  1721. /* This used to be an fputs(), but since the string might contain NUL's,
  1722.  * we now use fwrite().
  1723.  */
  1724. #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
  1725. #endif
  1726.  
  1727. /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
  1728.  * is returned in "result".
  1729.  */
  1730. #ifndef YY_INPUT
  1731. #define YY_INPUT(buf,result,max_size) \
  1732.     if ( yy_current_buffer->yy_is_interactive ) \
  1733.         { \
  1734.         int c = getc( yyin ); \
  1735.         result = c == EOF ? 0 : 1; \
  1736.         buf[0] = (char) c; \
  1737.         } \
  1738.     else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
  1739.           && ferror( yyin ) ) \
  1740.         YY_FATAL_ERROR( "input in flex scanner failed" );
  1741. #endif
  1742.  
  1743. /* No semi-colon after return; correct usage is to write "yyterminate();" -
  1744.  * we don't want an extra ';' after the "return" because that will cause
  1745.  * some compilers to complain about unreachable statements.
  1746.  */
  1747. #ifndef yyterminate
  1748. #define yyterminate() return YY_NULL
  1749. #endif
  1750.  
  1751. /* Number of entries by which start-condition stack grows. */
  1752. #ifndef YY_START_STACK_INCR
  1753. #define YY_START_STACK_INCR 25
  1754. #endif
  1755.  
  1756. /* Report a fatal error. */
  1757. #ifndef YY_FATAL_ERROR
  1758. #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
  1759. #endif
  1760.  
  1761. /* Default declaration of generated scanner - a define so the user can
  1762.  * easily add parameters.
  1763.  */
  1764. #ifndef YY_DECL
  1765. #define YY_DECL int yylex YY_PROTO(( void ))
  1766. #endif
  1767.  
  1768. /* Code executed at the beginning of each rule, after yytext and yyleng
  1769.  * have been set up.
  1770.  */
  1771. #ifndef YY_USER_ACTION
  1772. #define YY_USER_ACTION
  1773. #endif
  1774.  
  1775. /* Code executed at the end of each rule. */
  1776. #ifndef YY_BREAK
  1777. #define YY_BREAK break;
  1778. #endif
  1779.  
  1780. YY_DECL
  1781.     {
  1782.     register yy_state_type yy_current_state;
  1783.     register char *yy_cp, *yy_bp;
  1784.     register int yy_act;
  1785.  
  1786. # line 151 "../parser.l"
  1787.  
  1788.  
  1789.  
  1790.     if ( yy_init )
  1791.         {
  1792. #ifdef YY_USER_INIT
  1793.         YY_USER_INIT;
  1794. #endif
  1795.  
  1796.         if ( ! yy_start )
  1797.             yy_start = 1;    /* first start state */
  1798.  
  1799.         if ( ! yyin )
  1800.             yyin = stdin;
  1801.  
  1802.         if ( ! yyout )
  1803.             yyout = stdout;
  1804.  
  1805.         if ( yy_current_buffer )
  1806.             yy_init_buffer( yy_current_buffer, yyin );
  1807.         else
  1808.             yy_current_buffer =
  1809.                 yy_create_buffer( yyin, YY_BUF_SIZE );
  1810.  
  1811.         yy_load_buffer_state();
  1812.  
  1813.         yy_init = 0;
  1814.         }
  1815.  
  1816.     while ( 1 )        /* loops until end-of-file is reached */
  1817.         {
  1818.         yy_cp = yy_c_buf_p;
  1819.  
  1820.         /* Support of yytext. */
  1821.         *yy_cp = yy_hold_char;
  1822.  
  1823.         /* yy_bp points to the position in yy_ch_buf of the start of
  1824.          * the current run.
  1825.          */
  1826.         yy_bp = yy_cp;
  1827.  
  1828.         yy_current_state = yy_start;
  1829.         if ( yy_bp[-1] == '\n' )
  1830.             ++yy_current_state;
  1831.         yy_state_ptr = yy_state_buf;
  1832.         *yy_state_ptr++ = yy_current_state;
  1833. yy_match:
  1834.         do
  1835.             {
  1836.             register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
  1837.             while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
  1838.                 {
  1839.                 yy_current_state = (int) yy_def[yy_current_state];
  1840.                 if ( yy_current_state >= 934 )
  1841.                     yy_c = yy_meta[(unsigned int) yy_c];
  1842.                 }
  1843.             yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
  1844.             *yy_state_ptr++ = yy_current_state;
  1845.             ++yy_cp;
  1846.             }
  1847.         while ( yy_base[yy_current_state] != 3525 );
  1848.  
  1849. yy_find_action:
  1850.         yy_current_state = *--yy_state_ptr;
  1851.         yy_lp = yy_accept[yy_current_state];
  1852. find_rule: /* we branch to this label when backing up */
  1853.         for ( ; ; ) /* until we find what rule we matched */
  1854.             {
  1855.             if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
  1856.                 {
  1857.                 yy_act = yy_acclist[yy_lp];
  1858.                 if ( yy_act & YY_TRAILING_HEAD_MASK ||
  1859.                      yy_looking_for_trail_begin )
  1860.                     {
  1861.                     if ( yy_act == yy_looking_for_trail_begin )
  1862.                         {
  1863.                         yy_looking_for_trail_begin = 0;
  1864.                         yy_act &= ~YY_TRAILING_HEAD_MASK;
  1865.                         break;
  1866.                         }
  1867.                     }
  1868.                 else if ( yy_act & YY_TRAILING_MASK )
  1869.                     {
  1870.                     yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
  1871.                     yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
  1872.                     }
  1873.                 else
  1874.                     {
  1875.                     yy_full_match = yy_cp;
  1876.                     yy_full_state = yy_state_ptr;
  1877.                     yy_full_lp = yy_lp;
  1878.                     break;
  1879.                     }
  1880.                 ++yy_lp;
  1881.                 goto find_rule;
  1882.                 }
  1883.             --yy_cp;
  1884.             yy_current_state = *--yy_state_ptr;
  1885.             yy_lp = yy_accept[yy_current_state];
  1886.             }
  1887.  
  1888.         YY_DO_BEFORE_ACTION;
  1889.  
  1890.  
  1891. do_action:    /* This label is used only to access EOF actions. */
  1892.  
  1893.  
  1894.         switch ( yy_act )
  1895.     { /* beginning of action switch */
  1896. case 1:
  1897. YY_USER_ACTION
  1898. # line 153 "../parser.l"
  1899. {
  1900.     /*
  1901.      * Fully-qualified algebraic move, possibly with promotion
  1902.      */
  1903.     int skip1 = 0, skip2 = 0;
  1904.     ChessSquare piece;
  1905.     ChessMove result;
  1906.     
  1907.     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
  1908.  
  1909.     /* remove the / */
  1910.     if (yytext[1] == '/') skip1 = 1;
  1911.     
  1912.     /* remove the [xX:-] */
  1913.     if ((yytext[3+skip1] == 'x') || (yytext[3+skip1] == 'X') ||
  1914.     (yytext[3+skip1] == '-') || (yytext[3+skip1] == ':')) skip2 = 1;
  1915.     
  1916.     currentMoveString[0] = yytext[1+skip1];
  1917.     currentMoveString[1] = yytext[2+skip1];
  1918.     currentMoveString[2] = yytext[3+skip1+skip2];
  1919.     currentMoveString[3] = yytext[4+skip1+skip2];
  1920.     currentMoveString[4] = NULLCHAR;
  1921.     
  1922.     if (yyleng-skip1-skip2 > 5) {
  1923.     if (yytext[yyleng-1] == ')') {
  1924.         currentMoveString[4] = ToLower(yytext[yyleng-2]);
  1925.     } else {
  1926.         currentMoveString[4] = ToLower(yytext[yyleng-1]);
  1927.     }
  1928.     currentMoveString[5] = NULLCHAR;
  1929.     }
  1930.  
  1931.     piece = boards[yyboardindex]
  1932.       [currentMoveString[1] - '1'][currentMoveString[0] - 'a'];
  1933.     if (ToLower(yytext[0]) != ToLower(PieceToChar(piece)))
  1934.       return (int) BadMove;
  1935.  
  1936.     result = LegalityTest(boards[yyboardindex],
  1937.               FakeFlags(yyboardindex), EP_UNKNOWN,
  1938.               currentMoveString[1] - '1',
  1939.               currentMoveString[0] - 'a',
  1940.               currentMoveString[3] - '1',
  1941.               currentMoveString[2] - 'a',
  1942.               currentMoveString[4]);
  1943.  
  1944.     if (currentMoveString[4] == NULLCHAR &&
  1945.     (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
  1946.     currentMoveString[4] = 'q';
  1947.     currentMoveString[5] = NULLCHAR;
  1948.     }
  1949.  
  1950.     return (int) result;
  1951. }
  1952.     YY_BREAK
  1953. case 2:
  1954. YY_USER_ACTION
  1955. # line 207 "../parser.l"
  1956. {
  1957.     /*
  1958.      * Simple algebraic move, possibly with promotion
  1959.      */
  1960.     int skip = 0;
  1961.     ChessMove result;
  1962.  
  1963.     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
  1964.  
  1965.     /* remove the [xX:-] */
  1966.     if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
  1967.     (yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
  1968.  
  1969.     currentMoveString[0] = yytext[0];
  1970.     currentMoveString[1] = yytext[1];
  1971.     currentMoveString[2] = yytext[2+skip];
  1972.     currentMoveString[3] = yytext[3+skip];
  1973.     currentMoveString[4] = NULLCHAR;
  1974.  
  1975.     if (yyleng-skip > 4) {
  1976.     if (yytext[yyleng-1] == ')') {
  1977.         currentMoveString[4] = ToLower(yytext[yyleng-2]);
  1978.     } else {
  1979.         currentMoveString[4] = ToLower(yytext[yyleng-1]);
  1980.     }
  1981.     currentMoveString[5] = NULLCHAR;
  1982.     }
  1983.  
  1984.     result = LegalityTest(boards[yyboardindex],
  1985.               FakeFlags(yyboardindex), EP_UNKNOWN,
  1986.               currentMoveString[1] - '1',
  1987.               currentMoveString[0] - 'a',
  1988.               currentMoveString[3] - '1',
  1989.               currentMoveString[2] - 'a',
  1990.               currentMoveString[4]);
  1991.  
  1992.     if (currentMoveString[4] == NULLCHAR &&
  1993.     (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
  1994.     currentMoveString[4] = 'q';
  1995.     currentMoveString[5] = NULLCHAR;
  1996.     }
  1997.  
  1998.     return (int) result;
  1999. }
  2000.     YY_BREAK
  2001. case 3:
  2002. YY_USER_ACTION
  2003. # line 252 "../parser.l"
  2004. {
  2005.     /*
  2006.      * Pawn move, possibly with promotion
  2007.      */
  2008.     DisambiguateClosure cl;
  2009.     int skip = 0;
  2010.  
  2011.     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
  2012.  
  2013.     /* remove the =() */
  2014.     if (yytext[2] == '=') skip++;
  2015.     if (yytext[2+skip] == '(') skip++;
  2016.  
  2017.     cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
  2018.     cl.rfIn = -1;
  2019.     cl.ffIn = yytext[0] - 'a';
  2020.     cl.rtIn = yytext[1] - '1';
  2021.     cl.ftIn = yytext[0] - 'a';
  2022.     cl.promoCharIn = yytext[2+skip];
  2023.     Disambiguate(boards[yyboardindex],
  2024.          FakeFlags(yyboardindex), EP_UNKNOWN, &cl);
  2025.  
  2026.     currentMoveString[0] = cl.ff + 'a';
  2027.     currentMoveString[1] = cl.rf + '1';
  2028.     currentMoveString[2] = cl.ft + 'a';
  2029.     currentMoveString[3] = cl.rt + '1';
  2030.     currentMoveString[4] = cl.promoChar;
  2031.     currentMoveString[5] = NULLCHAR;
  2032.  
  2033.     return (int) cl.kind;
  2034. }
  2035.     YY_BREAK
  2036. case 4:
  2037. YY_USER_ACTION
  2038. # line 285 "../parser.l"
  2039. {
  2040.     /*
  2041.      * Pawn capture, possibly with promotion, possibly ambiguous
  2042.      */
  2043.     DisambiguateClosure cl;
  2044.     int skip1 = 0, skip2 = 0;
  2045.  
  2046.     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
  2047.  
  2048.     /* remove the [xX:-] and =() */
  2049.     if ((yytext[1] == 'x') || (yytext[1] == 'X')
  2050.     || (yytext[1] == ':') || (yytext[1] == '-')) skip1 = 1;
  2051.     if (yytext[2+skip1] == '=') skip2++;
  2052.     if (yytext[2+skip1+skip2] == '(') skip2++;
  2053.  
  2054.     cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
  2055.     cl.rfIn = -1;
  2056.     cl.ffIn = yytext[0] - 'a';
  2057.     cl.rtIn = -1;
  2058.     cl.ftIn = yytext[1+skip1] - 'a';
  2059.     cl.promoCharIn = yytext[2+skip1+skip2];
  2060.     Disambiguate(boards[yyboardindex],
  2061.          FakeFlags(yyboardindex), EP_UNKNOWN, &cl);
  2062.  
  2063.     currentMoveString[0] = cl.ff + 'a';
  2064.     currentMoveString[1] = cl.rf + '1';
  2065.     currentMoveString[2] = cl.ft + 'a';
  2066.     currentMoveString[3] = cl.rt + '1';
  2067.     currentMoveString[4] = cl.promoChar;
  2068.     currentMoveString[5] = NULLCHAR;
  2069.  
  2070.     return (int) cl.kind;
  2071. }
  2072.     YY_BREAK
  2073. case 5:
  2074. YY_USER_ACTION
  2075. # line 319 "../parser.l"
  2076. {
  2077.     /*
  2078.      * unambiguously abbreviated Pawn capture, possibly with promotion
  2079.      */
  2080.     int skip = 0;
  2081.     ChessMove result;
  2082.  
  2083.     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
  2084.  
  2085.     /* remove the [xX:-] */
  2086.     if ((yytext[1] == 'x') || (yytext[1] == 'X')
  2087.     || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
  2088.  
  2089.     currentMoveString[0] = yytext[0];
  2090.     currentMoveString[2] = yytext[1+skip];
  2091.     currentMoveString[3] = yytext[2+skip];
  2092.     if (WhiteOnMove(yyboardindex)) {
  2093.     if (yytext[2+skip] == '1') return (int) BadMove;
  2094.     currentMoveString[1] = yytext[2+skip] - 1;
  2095.     } else {
  2096.     if (yytext[2+skip] == '8') return (int) BadMove;
  2097.     currentMoveString[1] = yytext[2+skip] + 1;
  2098.     }
  2099.     if (yyleng-skip > 3) {
  2100.     if (yytext[yyleng-1] == ')')
  2101.       currentMoveString[4] = ToLower(yytext[yyleng-2]);
  2102.     else
  2103.       currentMoveString[4] = ToLower(yytext[yyleng-1]);
  2104.     currentMoveString[5] = NULLCHAR;
  2105.     } else {
  2106.     currentMoveString[4] = NULLCHAR;
  2107.     }
  2108.  
  2109.     result = LegalityTest(boards[yyboardindex],
  2110.               FakeFlags(yyboardindex), EP_UNKNOWN,
  2111.               currentMoveString[1] - '1',
  2112.               currentMoveString[0] - 'a',
  2113.               currentMoveString[3] - '1',
  2114.               currentMoveString[2] - 'a',
  2115.               currentMoveString[4]);
  2116.  
  2117.     if (currentMoveString[4] == NULLCHAR &&
  2118.     (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
  2119.     currentMoveString[4] = 'q';
  2120.     currentMoveString[5] = NULLCHAR;
  2121.     }
  2122.  
  2123.     if (result != BadMove) return (int) result;
  2124.  
  2125.     /* Special case: improperly written en passant capture */
  2126.     if (WhiteOnMove(yyboardindex)) {
  2127.     if (currentMoveString[3] == '5') {
  2128.         currentMoveString[1] = '5';
  2129.         currentMoveString[3] = '6';
  2130.     } else {
  2131.         return (int) BadMove;
  2132.     }
  2133.     } else {
  2134.     if (currentMoveString[3] == '4') {
  2135.         currentMoveString[1] = '4';
  2136.         currentMoveString[3] = '3';
  2137.     } else {
  2138.         return (int) BadMove;
  2139.     }
  2140.     }
  2141.  
  2142.     result = LegalityTest(boards[yyboardindex],
  2143.               FakeFlags(yyboardindex), EP_UNKNOWN,
  2144.               currentMoveString[1] - '1',
  2145.               currentMoveString[0] - 'a',
  2146.               currentMoveString[3] - '1',
  2147.               currentMoveString[2] - 'a',
  2148.               currentMoveString[4]);
  2149.  
  2150.     if (result == WhiteCapturesEnPassant || result == BlackCapturesEnPassant)
  2151.       return (int) result;
  2152.     else
  2153.       return (int) BadMove;
  2154. }
  2155.     YY_BREAK
  2156. case 6:
  2157. YY_USER_ACTION
  2158. # line 399 "../parser.l"
  2159. {
  2160.     /*
  2161.      * piece move, possibly ambiguous
  2162.      */
  2163.     DisambiguateClosure cl;
  2164.     int skip = 0;
  2165.  
  2166.     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
  2167.  
  2168.     /* remove the [xX:-] */
  2169.     if ((yytext[1] == 'x') || (yytext[1] == 'X')
  2170.     || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
  2171.  
  2172.     if (WhiteOnMove(yyboardindex)) {
  2173.     cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
  2174.     } else {
  2175.     cl.pieceIn = CharToPiece(ToLower(yytext[0]));
  2176.     }
  2177.     cl.rfIn = -1;
  2178.     cl.ffIn = -1;
  2179.     cl.rtIn = yytext[2+skip] - '1';
  2180.     cl.ftIn = yytext[1+skip] - 'a';
  2181.     cl.promoCharIn = NULLCHAR;
  2182.     Disambiguate(boards[yyboardindex],
  2183.          FakeFlags(yyboardindex), EP_UNKNOWN, &cl);
  2184.  
  2185.     currentMoveString[0] = cl.ff + 'a';
  2186.     currentMoveString[1] = cl.rf + '1';
  2187.     currentMoveString[2] = cl.ft + 'a';
  2188.     currentMoveString[3] = cl.rt + '1';
  2189.     currentMoveString[4] = cl.promoChar;
  2190.     currentMoveString[5] = NULLCHAR;
  2191.  
  2192.     return (int) cl.kind;
  2193. }
  2194.     YY_BREAK
  2195. case 7:
  2196. YY_USER_ACTION
  2197. # line 435 "../parser.l"
  2198. {
  2199.     /*
  2200.      * piece move with rank or file disambiguator
  2201.      */
  2202.     DisambiguateClosure cl;
  2203.     int skip = 0;
  2204.  
  2205.     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
  2206.  
  2207.     /* remove the [xX:-] */
  2208.     if ((yytext[2] == 'x') || (yytext[2] == 'X')
  2209.     || (yytext[2] == ':') || (yytext[2] == '-')) skip = 1;
  2210.  
  2211.     if (WhiteOnMove(yyboardindex)) {
  2212.     cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
  2213.     } else {
  2214.     cl.pieceIn = CharToPiece(ToLower(yytext[0]));
  2215.     }
  2216.     if (isalpha(yytext[1])) {
  2217.     cl.rfIn = -1;
  2218.     cl.ffIn = yytext[1] - 'a';
  2219.     } else {
  2220.     cl.rfIn = yytext[1] - '1';
  2221.     cl.ffIn = -1;
  2222.     }
  2223.     cl.rtIn = yytext[3+skip] - '1';
  2224.     cl.ftIn = yytext[2+skip] - 'a';
  2225.     cl.promoCharIn = NULLCHAR;
  2226.     Disambiguate(boards[yyboardindex],
  2227.          FakeFlags(yyboardindex), EP_UNKNOWN, &cl);
  2228.  
  2229.     currentMoveString[0] = cl.ff + 'a';
  2230.     currentMoveString[1] = cl.rf + '1';
  2231.     currentMoveString[2] = cl.ft + 'a';
  2232.     currentMoveString[3] = cl.rt + '1';
  2233.     currentMoveString[4] = cl.promoChar;
  2234.     currentMoveString[5] = NULLCHAR;
  2235.  
  2236.     return (int) cl.kind;
  2237. }
  2238.     YY_BREAK
  2239. case 8:
  2240. YY_USER_ACTION
  2241. # line 476 "../parser.l"
  2242. {
  2243.     int rf, ff, rt, ft;
  2244.  
  2245.     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
  2246.  
  2247.     if (WhiteOnMove(yyboardindex)) {
  2248.     if (boards[yyboardindex][0][3] == WhiteKing) {
  2249.         /* ICS wild castling */
  2250.         strcpy(currentMoveString, "d1f1");
  2251.         rf = 0;
  2252.         ff = 3;
  2253.         rt = 0;
  2254.         ft = 5;
  2255.     } else {
  2256.         strcpy(currentMoveString, "e1c1");
  2257.         rf = 0;
  2258.         ff = 4;
  2259.         rt = 0;
  2260.         ft = 2;
  2261.     }
  2262.     } else{ 
  2263.     if (boards[yyboardindex][7][3] == BlackKing) {
  2264.         /* ICS wild castling */
  2265.         strcpy(currentMoveString, "d8f8");
  2266.         rf = 7;
  2267.         ff = 3;
  2268.         rt = 7;
  2269.         ft = 5;
  2270.     } else {
  2271.         strcpy(currentMoveString, "e8c8");
  2272.         rf = 7;
  2273.         ff = 4;
  2274.         rt = 7;
  2275.         ft = 2;
  2276.     }
  2277.     }
  2278.     return (int) LegalityTest(boards[yyboardindex],
  2279.                   FakeFlags(yyboardindex), EP_UNKNOWN,
  2280.                   rf, ff, rt, ft, NULLCHAR);
  2281. }
  2282.     YY_BREAK
  2283. case 9:
  2284. YY_USER_ACTION
  2285. # line 517 "../parser.l"
  2286. {
  2287.     int rf, ff, rt, ft;
  2288.  
  2289.     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
  2290.  
  2291.     if (WhiteOnMove(yyboardindex)) {
  2292.     if (boards[yyboardindex][0][3] == WhiteKing) {
  2293.         /* ICS wild castling */
  2294.         strcpy(currentMoveString, "d1b1");
  2295.         rf = 0;
  2296.         ff = 3;
  2297.         rt = 0;
  2298.         ft = 1;
  2299.     } else {
  2300.         strcpy(currentMoveString, "e1g1");
  2301.         rf = 0;
  2302.         ff = 4;
  2303.         rt = 0;
  2304.         ft = 6;
  2305.     }
  2306.     } else {
  2307.     if (boards[yyboardindex][7][3] == BlackKing) {
  2308.         /* ICS wild castling */
  2309.         strcpy(currentMoveString, "d8b8");
  2310.         rf = 7;
  2311.         ff = 3;
  2312.         rt = 7;
  2313.         ft = 1;
  2314.     } else {
  2315.         strcpy(currentMoveString, "e8g8");
  2316.         rf = 7;
  2317.         ff = 4;
  2318.         rt = 7;
  2319.         ft = 6;
  2320.     }
  2321.     }
  2322.     return (int) LegalityTest(boards[yyboardindex],
  2323.                   FakeFlags(yyboardindex), EP_UNKNOWN,
  2324.                   rf, ff, rt, ft, NULLCHAR);
  2325. }
  2326.     YY_BREAK
  2327. case 10:
  2328. YY_USER_ACTION
  2329. # line 558 "../parser.l"
  2330. {
  2331.     if (WhiteOnMove(yyboardindex))
  2332.       return (int) BlackWins;
  2333.     else
  2334.       return (int) WhiteWins;
  2335. }
  2336.     YY_BREAK
  2337. case 11:
  2338. YY_USER_ACTION
  2339. # line 565 "../parser.l"
  2340. {
  2341.     return (int) BlackWins;
  2342. }
  2343.     YY_BREAK
  2344. case 12:
  2345. YY_USER_ACTION
  2346. # line 569 "../parser.l"
  2347. {
  2348.     return (int) WhiteWins;
  2349. }
  2350.     YY_BREAK
  2351. case 13:
  2352. YY_USER_ACTION
  2353. # line 573 "../parser.l"
  2354. {
  2355.     return (int) WhiteWins;
  2356. }
  2357.     YY_BREAK
  2358. case 14:
  2359. YY_USER_ACTION
  2360. # line 577 "../parser.l"
  2361. {
  2362.     return (int) BlackWins;
  2363. }
  2364.     YY_BREAK
  2365. case 15:
  2366. YY_USER_ACTION
  2367. # line 581 "../parser.l"
  2368. {
  2369.     return (int) GameUnfinished;
  2370. }
  2371.     YY_BREAK
  2372. case 16:
  2373. YY_USER_ACTION
  2374. # line 585 "../parser.l"
  2375. {
  2376.     return (int) GameIsDrawn;
  2377. }
  2378.     YY_BREAK
  2379. case 17:
  2380. YY_USER_ACTION
  2381. # line 589 "../parser.l"
  2382. {
  2383.     return (int) GameIsDrawn;
  2384. }
  2385.     YY_BREAK
  2386. case 18:
  2387. YY_USER_ACTION
  2388. # line 593 "../parser.l"
  2389. {
  2390.     if (WhiteOnMove(yyboardindex))
  2391.       return (int) BlackWins;
  2392.     else
  2393.       return (int) WhiteWins;
  2394. }
  2395.     YY_BREAK
  2396. case 19:
  2397. YY_USER_ACTION
  2398. # line 600 "../parser.l"
  2399. {
  2400.     if (WhiteOnMove(yyboardindex))
  2401.       return (int) BlackWins;
  2402.     else
  2403.       return (int) WhiteWins;
  2404. }
  2405.     YY_BREAK
  2406. case 20:
  2407. YY_USER_ACTION
  2408. # line 607 "../parser.l"
  2409. {
  2410.     return (int) GameIsDrawn;
  2411. }
  2412.     YY_BREAK
  2413. case 21:
  2414. YY_USER_ACTION
  2415. # line 611 "../parser.l"
  2416. {
  2417.     return (int) GameIsDrawn;
  2418. }
  2419.     YY_BREAK
  2420. case 22:
  2421. YY_USER_ACTION
  2422. # line 615 "../parser.l"
  2423. {
  2424.     return (int) GameIsDrawn;
  2425. }
  2426.     YY_BREAK
  2427. case 23:
  2428. YY_USER_ACTION
  2429. # line 619 "../parser.l"
  2430.     return (int) WhiteWins;
  2431. }
  2432.     YY_BREAK
  2433. case 24:
  2434. YY_USER_ACTION
  2435. # line 623 "../parser.l"
  2436.     return (int) BlackWins;
  2437. }
  2438.     YY_BREAK
  2439. case 25:
  2440. YY_USER_ACTION
  2441. # line 627 "../parser.l"
  2442.     return (int) BlackWins;
  2443. }
  2444.     YY_BREAK
  2445. case 26:
  2446. YY_USER_ACTION
  2447. # line 631 "../parser.l"
  2448.     return (int) WhiteWins;
  2449. }
  2450.     YY_BREAK
  2451. case 27:
  2452. YY_USER_ACTION
  2453. # line 635 "../parser.l"
  2454.     return (int) WhiteWins;
  2455. }
  2456.     YY_BREAK
  2457. case 28:
  2458. YY_USER_ACTION
  2459. # line 639 "../parser.l"
  2460.     return (int) BlackWins;
  2461. }
  2462.     YY_BREAK
  2463. case 29:
  2464. YY_USER_ACTION
  2465. # line 643 "../parser.l"
  2466. {
  2467.     return (int) GameIsDrawn;
  2468. }
  2469.     YY_BREAK
  2470. case 30:
  2471. YY_USER_ACTION
  2472. # line 647 "../parser.l"
  2473. {
  2474.     return (int) GameUnfinished;
  2475. }
  2476.     YY_BREAK
  2477. case 31:
  2478. YY_USER_ACTION
  2479. # line 651 "../parser.l"
  2480. {
  2481.     /* move numbers */
  2482.     if ((yyleng == 1) && (yytext[0] == '1'))
  2483.       return (int) MoveNumberOne;
  2484. }
  2485.     YY_BREAK
  2486. case 32:
  2487. YY_USER_ACTION
  2488. # line 657 "../parser.l"
  2489. {
  2490.     /* elapsed time indication, e.g. (0:12) */ 
  2491.     return (int) ElapsedTime;
  2492. }
  2493.     YY_BREAK
  2494. case 33:
  2495. YY_USER_ACTION
  2496. # line 662 "../parser.l"
  2497. {
  2498.     /* position diagram enclosed in [-- --] */
  2499.     return (int) PositionDiagram;
  2500. }
  2501.     YY_BREAK
  2502. case 34:
  2503. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  2504. yy_c_buf_p = yy_cp -= 1;
  2505. YY_DO_BEFORE_ACTION; /* set up yytext again */
  2506. YY_USER_ACTION
  2507. # line 667 "../parser.l"
  2508. {
  2509.     /* position diagram enclosed in {-- --} */
  2510.     return (int) PositionDiagram;
  2511. }
  2512.     YY_BREAK
  2513. case 35:
  2514. YY_USER_ACTION
  2515. # line 672 "../parser.l"
  2516. {
  2517.     return (int) PGNTag;
  2518. }    
  2519.     YY_BREAK
  2520. case 36:
  2521. YY_USER_ACTION
  2522. # line 676 "../parser.l"
  2523. {
  2524.     return (int) GNUChessGame;
  2525. }
  2526.     YY_BREAK
  2527. case 37:
  2528. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  2529. yy_c_buf_p = yy_cp -= 1;
  2530. YY_DO_BEFORE_ACTION; /* set up yytext again */
  2531. YY_USER_ACTION
  2532. # line 680 "../parser.l"
  2533. {
  2534.     return (int) XBoardGame;
  2535. }
  2536.     YY_BREAK
  2537. case 38:
  2538. YY_USER_ACTION
  2539. # line 684 "../parser.l"
  2540. {                    /* anything in {} */
  2541.     return (int) Comment; 
  2542. }
  2543.     YY_BREAK
  2544. case 39:
  2545. *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
  2546. yy_c_buf_p = yy_cp -= 1;
  2547. YY_DO_BEFORE_ACTION; /* set up yytext again */
  2548. YY_USER_ACTION
  2549. # line 688 "../parser.l"
  2550. {                                          /* ; to end of line */
  2551.     return (int) Comment;
  2552. }
  2553.     YY_BREAK
  2554. case 40:
  2555. YY_USER_ACTION
  2556. # line 692 "../parser.l"
  2557. {                    /* anything in [] */
  2558.     return (int) Comment; 
  2559. }
  2560.     YY_BREAK
  2561. case 41:
  2562. YY_USER_ACTION
  2563. # line 696 "../parser.l"
  2564. {           /* nested () */
  2565.     return (int) Comment; 
  2566. }
  2567.     YY_BREAK
  2568. case 42:
  2569. YY_USER_ACTION
  2570. # line 700 "../parser.l"
  2571. {                 /* >=2 chars in () */
  2572.     return (int) Comment; 
  2573. }       
  2574.     YY_BREAK
  2575. case 43:
  2576. YY_USER_ACTION
  2577. # line 704 "../parser.l"
  2578. {
  2579.         /* Skip mail headers */
  2580. }
  2581.     YY_BREAK
  2582. case 44:
  2583. YY_USER_ACTION
  2584. # line 708 "../parser.l"
  2585. {
  2586.         /* Skip random words */
  2587. }
  2588.     YY_BREAK
  2589. case 45:
  2590. YY_USER_ACTION
  2591. # line 712 "../parser.l"
  2592. {
  2593.         /* Skip everything else */
  2594. }
  2595.     YY_BREAK
  2596. case 46:
  2597. YY_USER_ACTION
  2598. # line 716 "../parser.l"
  2599. ECHO;
  2600.     YY_BREAK
  2601.             case YY_STATE_EOF(INITIAL):
  2602.                 yyterminate();
  2603.  
  2604.     case YY_END_OF_BUFFER:
  2605.         {
  2606.         /* Amount of text matched not including the EOB char. */
  2607.         int yy_amount_of_matched_text = yy_cp - yytext_ptr - 1;
  2608.  
  2609.         /* Undo the effects of YY_DO_BEFORE_ACTION. */
  2610.         *yy_cp = yy_hold_char;
  2611.  
  2612.         if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
  2613.             {
  2614.             /* We're scanning a new file or input source.  It's
  2615.              * possible that this happened because the user
  2616.              * just pointed yyin at a new source and called
  2617.              * yylex().  If so, then we have to assure
  2618.              * consistency between yy_current_buffer and our
  2619.              * globals.  Here is the right place to do so, because
  2620.              * this is the first action (other than possibly a
  2621.              * back-up) that will match for the new input source.
  2622.              */
  2623.             yy_n_chars = yy_current_buffer->yy_n_chars;
  2624.             yy_current_buffer->yy_input_file = yyin;
  2625.             yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
  2626.             }
  2627.  
  2628.         /* Note that here we test for yy_c_buf_p "<=" to the position
  2629.          * of the first EOB in the buffer, since yy_c_buf_p will
  2630.          * already have been incremented past the NUL character
  2631.          * (since all states make transitions on EOB to the
  2632.          * end-of-buffer state).  Contrast this with the test
  2633.          * in input().
  2634.          */
  2635.         if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
  2636.             { /* This was really a NUL. */
  2637.             yy_state_type yy_next_state;
  2638.  
  2639.             yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
  2640.  
  2641.             yy_current_state = yy_get_previous_state();
  2642.  
  2643.             /* Okay, we're now positioned to make the NUL
  2644.              * transition.  We couldn't have
  2645.              * yy_get_previous_state() go ahead and do it
  2646.              * for us because it doesn't know how to deal
  2647.              * with the possibility of jamming (and we don't
  2648.              * want to build jamming into it because then it
  2649.              * will run more slowly).
  2650.              */
  2651.  
  2652.             yy_next_state = yy_try_NUL_trans( yy_current_state );
  2653.  
  2654.             yy_bp = yytext_ptr + YY_MORE_ADJ;
  2655.  
  2656.             if ( yy_next_state )
  2657.                 {
  2658.                 /* Consume the NUL. */
  2659.                 yy_cp = ++yy_c_buf_p;
  2660.                 yy_current_state = yy_next_state;
  2661.                 goto yy_match;
  2662.                 }
  2663.  
  2664.             else
  2665.                 {
  2666.                             yy_cp = yy_c_buf_p;
  2667.                 goto yy_find_action;
  2668.                 }
  2669.             }
  2670.  
  2671.         else switch ( yy_get_next_buffer() )
  2672.             {
  2673.             case EOB_ACT_END_OF_FILE:
  2674.                 {
  2675.                 yy_did_buffer_switch_on_eof = 0;
  2676.  
  2677.                 if ( yywrap() )
  2678.                     {
  2679.                     /* Note: because we've taken care in
  2680.                      * yy_get_next_buffer() to have set up
  2681.                      * yytext, we can now set up
  2682.                      * yy_c_buf_p so that if some total
  2683.                      * hoser (like flex itself) wants to
  2684.                      * call the scanner after we return the
  2685.                      * YY_NULL, it'll still work - another
  2686.                      * YY_NULL will get returned.
  2687.                      */
  2688.                     yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
  2689.  
  2690.                     yy_act = YY_STATE_EOF(YY_START);
  2691.                     goto do_action;
  2692.                     }
  2693.  
  2694.                 else
  2695.                     {
  2696.                     if ( ! yy_did_buffer_switch_on_eof )
  2697.                         YY_NEW_FILE;
  2698.                     }
  2699.                 break;
  2700.                 }
  2701.  
  2702.             case EOB_ACT_CONTINUE_SCAN:
  2703.                 yy_c_buf_p =
  2704.                     yytext_ptr + yy_amount_of_matched_text;
  2705.  
  2706.                 yy_current_state = yy_get_previous_state();
  2707.  
  2708.                 yy_cp = yy_c_buf_p;
  2709.                 yy_bp = yytext_ptr + YY_MORE_ADJ;
  2710.                 goto yy_match;
  2711.  
  2712.             case EOB_ACT_LAST_MATCH:
  2713.                 yy_c_buf_p =
  2714.                 &yy_current_buffer->yy_ch_buf[yy_n_chars];
  2715.  
  2716.                 yy_current_state = yy_get_previous_state();
  2717.  
  2718.                 yy_cp = yy_c_buf_p;
  2719.                 yy_bp = yytext_ptr + YY_MORE_ADJ;
  2720.                 goto yy_find_action;
  2721.             }
  2722.         break;
  2723.         }
  2724.  
  2725.     default:
  2726.         YY_FATAL_ERROR(
  2727.             "fatal flex scanner internal error--no action found" );
  2728.     } /* end of action switch */
  2729.         } /* end of scanning one token */
  2730.     } /* end of yylex */
  2731.  
  2732.  
  2733. /* yy_get_next_buffer - try to read in a new buffer
  2734.  *
  2735.  * Returns a code representing an action:
  2736.  *    EOB_ACT_LAST_MATCH -
  2737.  *    EOB_ACT_CONTINUE_SCAN - continue scanning from current position
  2738.  *    EOB_ACT_END_OF_FILE - end of file
  2739.  */
  2740.  
  2741. static int yy_get_next_buffer()
  2742.     {
  2743.     register char *dest = yy_current_buffer->yy_ch_buf;
  2744.     register char *source = yytext_ptr - 1; /* copy prev. char, too */
  2745.     register int number_to_move, i;
  2746.     int ret_val;
  2747.  
  2748.     if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
  2749.         YY_FATAL_ERROR(
  2750.         "fatal flex scanner internal error--end of buffer missed" );
  2751.  
  2752.     if ( yy_current_buffer->yy_fill_buffer == 0 )
  2753.         { /* Don't try to fill the buffer, so this is an EOF. */
  2754.         if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
  2755.             {
  2756.             /* We matched a singled characater, the EOB, so
  2757.              * treat this as a final EOF.
  2758.              */
  2759.             return EOB_ACT_END_OF_FILE;
  2760.             }
  2761.  
  2762.         else
  2763.             {
  2764.             /* We matched some text prior to the EOB, first
  2765.              * process it.
  2766.              */
  2767.             return EOB_ACT_LAST_MATCH;
  2768.             }
  2769.         }
  2770.  
  2771.     /* Try to read more data. */
  2772.  
  2773.     /* First move last chars to start of buffer. */
  2774.     number_to_move = yy_c_buf_p - yytext_ptr;
  2775.  
  2776.     for ( i = 0; i < number_to_move; ++i )
  2777.         *(dest++) = *(source++);
  2778.  
  2779.     if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
  2780.         /* don't do the read, it's not guaranteed to return an EOF,
  2781.          * just force an EOF
  2782.          */
  2783.         yy_n_chars = 0;
  2784.  
  2785.     else
  2786.         {
  2787.         int num_to_read =
  2788.             yy_current_buffer->yy_buf_size - number_to_move - 1;
  2789.  
  2790.         while ( num_to_read <= 0 )
  2791.             { /* Not enough room in the buffer - grow it. */
  2792. #ifdef YY_USES_REJECT
  2793.             YY_FATAL_ERROR(
  2794. "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
  2795. #else
  2796.  
  2797.             /* just a shorter name for the current buffer */
  2798.             YY_BUFFER_STATE b = yy_current_buffer;
  2799.  
  2800.             int yy_c_buf_p_offset = yy_c_buf_p - b->yy_ch_buf;
  2801.  
  2802.             b->yy_buf_size *= 2;
  2803.             b->yy_ch_buf = (char *)
  2804.                 yy_flex_realloc( (void *) b->yy_ch_buf,
  2805.                          b->yy_buf_size );
  2806.  
  2807.             if ( ! b->yy_ch_buf )
  2808.                 YY_FATAL_ERROR(
  2809.                 "fatal error - scanner input buffer overflow" );
  2810.  
  2811.             yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
  2812.  
  2813.             num_to_read = yy_current_buffer->yy_buf_size -
  2814.                         number_to_move - 1;
  2815. #endif
  2816.             }
  2817.  
  2818.         if ( num_to_read > YY_READ_BUF_SIZE )
  2819.             num_to_read = YY_READ_BUF_SIZE;
  2820.  
  2821.         /* Read in more data. */
  2822.         YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
  2823.             yy_n_chars, num_to_read );
  2824.         }
  2825.  
  2826.     if ( yy_n_chars == 0 )
  2827.         {
  2828.         if ( number_to_move - YY_MORE_ADJ == 1 )
  2829.             {
  2830.             ret_val = EOB_ACT_END_OF_FILE;
  2831.             yyrestart( yyin );
  2832.             }
  2833.  
  2834.         else
  2835.             {
  2836.             ret_val = EOB_ACT_LAST_MATCH;
  2837.             yy_current_buffer->yy_buffer_status =
  2838.                 YY_BUFFER_EOF_PENDING;
  2839.             }
  2840.         }
  2841.  
  2842.     else
  2843.         ret_val = EOB_ACT_CONTINUE_SCAN;
  2844.  
  2845.     yy_n_chars += number_to_move;
  2846.     yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
  2847.     yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
  2848.  
  2849.     /* yytext begins at the second character in yy_ch_buf; the first
  2850.      * character is the one which preceded it before reading in the latest
  2851.      * buffer; it needs to be kept around in case it's a newline, so
  2852.      * yy_get_previous_state() will have with '^' rules active.
  2853.      */
  2854.  
  2855.     yytext_ptr = &yy_current_buffer->yy_ch_buf[1];
  2856.  
  2857.     return ret_val;
  2858.     }
  2859.  
  2860.  
  2861. /* yy_get_previous_state - get the state just before the EOB char was reached */
  2862.  
  2863. static yy_state_type yy_get_previous_state()
  2864.     {
  2865.     register yy_state_type yy_current_state;
  2866.     register char *yy_cp;
  2867.  
  2868.     register char *yy_bp = yytext_ptr;
  2869.  
  2870.     yy_current_state = yy_start;
  2871.     if ( yy_bp[-1] == '\n' )
  2872.         ++yy_current_state;
  2873.     yy_state_ptr = yy_state_buf;
  2874.     *yy_state_ptr++ = yy_current_state;
  2875.  
  2876.     for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
  2877.         {
  2878.         register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
  2879.         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
  2880.             {
  2881.             yy_current_state = (int) yy_def[yy_current_state];
  2882.             if ( yy_current_state >= 934 )
  2883.                 yy_c = yy_meta[(unsigned int) yy_c];
  2884.             }
  2885.         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
  2886.         *yy_state_ptr++ = yy_current_state;
  2887.         }
  2888.  
  2889.     return yy_current_state;
  2890.     }
  2891.  
  2892.  
  2893. /* yy_try_NUL_trans - try to make a transition on the NUL character
  2894.  *
  2895.  * synopsis
  2896.  *    next_state = yy_try_NUL_trans( current_state );
  2897.  */
  2898.  
  2899. #ifdef YY_USE_PROTOS
  2900. static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
  2901. #else
  2902. static yy_state_type yy_try_NUL_trans( yy_current_state )
  2903. yy_state_type yy_current_state;
  2904. #endif
  2905.     {
  2906.     register int yy_is_jam;
  2907.  
  2908.     register YY_CHAR yy_c = 1;
  2909.     while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
  2910.         {
  2911.         yy_current_state = (int) yy_def[yy_current_state];
  2912.         if ( yy_current_state >= 934 )
  2913.             yy_c = yy_meta[(unsigned int) yy_c];
  2914.         }
  2915.     yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
  2916.     *yy_state_ptr++ = yy_current_state;
  2917.     yy_is_jam = (yy_current_state == 933);
  2918.  
  2919.     return yy_is_jam ? 0 : yy_current_state;
  2920.     }
  2921.  
  2922.  
  2923. #ifdef YY_USE_PROTOS
  2924. static void yyunput( int c, register char *yy_bp )
  2925. #else
  2926. static void yyunput( c, yy_bp )
  2927. int c;
  2928. register char *yy_bp;
  2929. #endif
  2930.     {
  2931.     register char *yy_cp = yy_c_buf_p;
  2932.  
  2933.     /* undo effects of setting up yytext */
  2934.     *yy_cp = yy_hold_char;
  2935.  
  2936.     if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
  2937.         { /* need to shift things up to make room */
  2938.         /* +2 for EOB chars. */
  2939.         register int number_to_move = yy_n_chars + 2;
  2940.         register char *dest = &yy_current_buffer->yy_ch_buf[
  2941.                     yy_current_buffer->yy_buf_size + 2];
  2942.         register char *source =
  2943.                 &yy_current_buffer->yy_ch_buf[number_to_move];
  2944.  
  2945.         while ( source > yy_current_buffer->yy_ch_buf )
  2946.             *--dest = *--source;
  2947.  
  2948.         yy_cp += dest - source;
  2949.         yy_bp += dest - source;
  2950.         yy_n_chars = yy_current_buffer->yy_buf_size;
  2951.  
  2952.         if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
  2953.             YY_FATAL_ERROR( "flex scanner push-back overflow" );
  2954.         }
  2955.  
  2956.     if ( yy_cp > yy_bp && yy_cp[-1] == '\n' )
  2957.         yy_cp[-2] = '\n';
  2958.  
  2959.     *--yy_cp = (char) c;
  2960.  
  2961.  
  2962.     /* Note: the formal parameter *must* be called "yy_bp" for this
  2963.      * macro to now work correctly.
  2964.      */
  2965.     YY_DO_BEFORE_ACTION; /* set up yytext again */
  2966.     }
  2967.  
  2968.  
  2969. #ifdef __cplusplus
  2970. static int yyinput()
  2971. #else
  2972. static int input()
  2973. #endif
  2974.     {
  2975.     int c;
  2976.  
  2977.     *yy_c_buf_p = yy_hold_char;
  2978.  
  2979.     if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
  2980.         {
  2981.         /* yy_c_buf_p now points to the character we want to return.
  2982.          * If this occurs *before* the EOB characters, then it's a
  2983.          * valid NUL; if not, then we've hit the end of the buffer.
  2984.          */
  2985.         if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
  2986.             /* This was really a NUL. */
  2987.             *yy_c_buf_p = '\0';
  2988.  
  2989.         else
  2990.             { /* need more input */
  2991.             yytext_ptr = yy_c_buf_p;
  2992.             ++yy_c_buf_p;
  2993.  
  2994.             switch ( yy_get_next_buffer() )
  2995.                 {
  2996.                 case EOB_ACT_END_OF_FILE:
  2997.                     {
  2998.                     if ( yywrap() )
  2999.                         {
  3000.                         yy_c_buf_p =
  3001.                         yytext_ptr + YY_MORE_ADJ;
  3002.                         return EOF;
  3003.                         }
  3004.  
  3005.                     YY_NEW_FILE;
  3006. #ifdef __cplusplus
  3007.                     return yyinput();
  3008. #else
  3009.                     return input();
  3010. #endif
  3011.                     }
  3012.  
  3013.                 case EOB_ACT_CONTINUE_SCAN:
  3014.                     yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
  3015.                     break;
  3016.  
  3017.                 case EOB_ACT_LAST_MATCH:
  3018. #ifdef __cplusplus
  3019.                     YY_FATAL_ERROR(
  3020.                     "unexpected last match in yyinput()" );
  3021. #else
  3022.                     YY_FATAL_ERROR(
  3023.                     "unexpected last match in input()" );
  3024. #endif
  3025.                 }
  3026.             }
  3027.         }
  3028.  
  3029.     c = *(unsigned char *) yy_c_buf_p;    /* cast for 8-bit char's */
  3030.     *yy_c_buf_p = '\0';    /* preserve yytext */
  3031.     yy_hold_char = *++yy_c_buf_p;
  3032.  
  3033.     return c;
  3034.     }
  3035.  
  3036.  
  3037. #ifdef YY_USE_PROTOS
  3038. void yyrestart( FILE *input_file )
  3039. #else
  3040. void yyrestart( input_file )
  3041. FILE *input_file;
  3042. #endif
  3043.     {
  3044.     if ( ! yy_current_buffer )
  3045.         yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
  3046.  
  3047.     yy_init_buffer( yy_current_buffer, input_file );
  3048.     yy_load_buffer_state();
  3049.     }
  3050.  
  3051.  
  3052. #ifdef YY_USE_PROTOS
  3053. void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
  3054. #else
  3055. void yy_switch_to_buffer( new_buffer )
  3056. YY_BUFFER_STATE new_buffer;
  3057. #endif
  3058.     {
  3059.     if ( yy_current_buffer == new_buffer )
  3060.         return;
  3061.  
  3062.     if ( yy_current_buffer )
  3063.         {
  3064.         /* Flush out information for old buffer. */
  3065.         *yy_c_buf_p = yy_hold_char;
  3066.         yy_current_buffer->yy_buf_pos = yy_c_buf_p;
  3067.         yy_current_buffer->yy_n_chars = yy_n_chars;
  3068.         }
  3069.  
  3070.     yy_current_buffer = new_buffer;
  3071.     yy_load_buffer_state();
  3072.  
  3073.     /* We don't actually know whether we did this switch during
  3074.      * EOF (yywrap()) processing, but the only time this flag
  3075.      * is looked at is after yywrap() is called, so it's safe
  3076.      * to go ahead and always set it.
  3077.      */
  3078.     yy_did_buffer_switch_on_eof = 1;
  3079.     }
  3080.  
  3081.  
  3082. #ifdef YY_USE_PROTOS
  3083. void yy_load_buffer_state( void )
  3084. #else
  3085. void yy_load_buffer_state()
  3086. #endif
  3087.     {
  3088.     yy_n_chars = yy_current_buffer->yy_n_chars;
  3089.     yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
  3090.     yyin = yy_current_buffer->yy_input_file;
  3091.     yy_hold_char = *yy_c_buf_p;
  3092.     }
  3093.  
  3094.  
  3095. #ifdef YY_USE_PROTOS
  3096. YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
  3097. #else
  3098. YY_BUFFER_STATE yy_create_buffer( file, size )
  3099. FILE *file;
  3100. int size;
  3101. #endif
  3102.     {
  3103.     YY_BUFFER_STATE b;
  3104.  
  3105.     b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
  3106.  
  3107.     if ( ! b )
  3108.         YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
  3109.  
  3110.     b->yy_buf_size = size;
  3111.  
  3112.     /* yy_ch_buf has to be 2 characters longer than the size given because
  3113.      * we need to put in 2 end-of-buffer characters.
  3114.      */
  3115.     b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
  3116.  
  3117.     if ( ! b->yy_ch_buf )
  3118.         YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
  3119.  
  3120.     yy_init_buffer( b, file );
  3121.  
  3122.     return b;
  3123.     }
  3124.  
  3125.  
  3126. #ifdef YY_USE_PROTOS
  3127. void yy_delete_buffer( YY_BUFFER_STATE b )
  3128. #else
  3129. void yy_delete_buffer( b )
  3130. YY_BUFFER_STATE b;
  3131. #endif
  3132.     {
  3133.     if ( b == yy_current_buffer )
  3134.         yy_current_buffer = (YY_BUFFER_STATE) 0;
  3135.  
  3136.     yy_flex_free( (void *) b->yy_ch_buf );
  3137.     yy_flex_free( (void *) b );
  3138.     }
  3139.  
  3140.  
  3141. #ifdef YY_USE_PROTOS
  3142. void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
  3143. #else
  3144. void yy_init_buffer( b, file )
  3145. YY_BUFFER_STATE b;
  3146. FILE *file;
  3147. #endif
  3148.     {
  3149.     b->yy_input_file = file;
  3150.  
  3151.     /* We put in the '\n' and start reading from [1] so that an
  3152.      * initial match-at-newline will be true.
  3153.      */
  3154.  
  3155.     b->yy_ch_buf[0] = '\n';
  3156.     b->yy_n_chars = 1;
  3157.  
  3158.     /* We always need two end-of-buffer characters.  The first causes
  3159.      * a transition to the end-of-buffer state.  The second causes
  3160.      * a jam in that state.
  3161.      */
  3162.     b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
  3163.     b->yy_ch_buf[2] = YY_END_OF_BUFFER_CHAR;
  3164.  
  3165.     b->yy_buf_pos = &b->yy_ch_buf[1];
  3166.  
  3167.     b->yy_is_interactive = file ? isatty( fileno(file) ) : 0;
  3168.  
  3169.     b->yy_fill_buffer = 1;
  3170.  
  3171.     b->yy_buffer_status = YY_BUFFER_NEW;
  3172.     }
  3173.  
  3174.  
  3175. #ifdef YY_USE_PROTOS
  3176. static void yy_push_state( int new_state )
  3177. #else
  3178. static void yy_push_state( new_state )
  3179. int new_state;
  3180. #endif
  3181.     {
  3182.     if ( yy_start_stack_ptr >= yy_start_stack_depth )
  3183.         {
  3184.         int new_size;
  3185.  
  3186.         yy_start_stack_depth += YY_START_STACK_INCR;
  3187.         new_size = yy_start_stack_depth * sizeof( int );
  3188.  
  3189.         if ( ! yy_start_stack )
  3190.             yy_start_stack = (int *) yy_flex_alloc( new_size );
  3191.  
  3192.         else
  3193.             yy_start_stack = (int *) yy_flex_realloc(
  3194.                     (void *) yy_start_stack, new_size );
  3195.  
  3196.         if ( ! yy_start_stack )
  3197.             YY_FATAL_ERROR(
  3198.             "out of memory expanding start-condition stack" );
  3199.         }
  3200.  
  3201.     yy_start_stack[yy_start_stack_ptr++] = YY_START;
  3202.  
  3203.     BEGIN(new_state);
  3204.     }
  3205.  
  3206.  
  3207. static void yy_pop_state()
  3208.     {
  3209.     if ( --yy_start_stack_ptr < 0 )
  3210.         YY_FATAL_ERROR( "start-condition stack underflow" );
  3211.  
  3212.     BEGIN(yy_start_stack[yy_start_stack_ptr]);
  3213.     }
  3214.  
  3215.  
  3216. static int yy_top_state()
  3217.     {
  3218.     return yy_start_stack[yy_start_stack_ptr - 1];
  3219.     }
  3220.  
  3221.  
  3222. #ifdef YY_USE_PROTOS
  3223. static void yy_fatal_error( const char msg[] )
  3224. #else
  3225. static void yy_fatal_error( msg )
  3226. char msg[];
  3227. #endif
  3228.     {
  3229.     (void) fprintf( stderr, "%s\n", msg );
  3230.     exit( 1 );
  3231.     }
  3232.  
  3233.  
  3234.  
  3235. /* Redefine yyless() so it works in section 3 code. */
  3236.  
  3237. #undef yyless
  3238. #define yyless(n) \
  3239.     do \
  3240.         { \
  3241.         /* Undo effects of setting up yytext. */ \
  3242.         yytext[yyleng] = yy_hold_char; \
  3243.         yy_c_buf_p = yytext + n - YY_MORE_ADJ; \
  3244.         yy_hold_char = *yy_c_buf_p; \
  3245.         *yy_c_buf_p = '\0'; \
  3246.         yyleng = n; \
  3247.         } \
  3248.     while ( 0 )
  3249.  
  3250.  
  3251. /* Internal utility routines. */
  3252.  
  3253. #ifndef yytext_ptr
  3254. #ifdef YY_USE_PROTOS
  3255. static void yy_flex_strncpy( char *s1, const char *s2, int n )
  3256. #else
  3257. static void yy_flex_strncpy( s1, s2, n )
  3258. char *s1;
  3259. const char *s2;
  3260. int n;
  3261. #endif
  3262.     {
  3263.     register int i;
  3264.     for ( i = 0; i < n; ++i )
  3265.         s1[i] = s2[i];
  3266.     }
  3267. #endif
  3268.  
  3269.  
  3270. #ifdef YY_USE_PROTOS
  3271. static void *yy_flex_alloc( unsigned int size )
  3272. #else
  3273. static void *yy_flex_alloc( size )
  3274. unsigned int size;
  3275. #endif
  3276.     {
  3277.     return (void *) malloc( size );
  3278.     }
  3279.  
  3280. #ifdef YY_USE_PROTOS
  3281. static void *yy_flex_realloc( void *ptr, unsigned int size )
  3282. #else
  3283. static void *yy_flex_realloc( ptr, size )
  3284. void *ptr;
  3285. unsigned int size;
  3286. #endif
  3287.     {
  3288.     return (void *) realloc( ptr, size );
  3289.     }
  3290.  
  3291. #ifdef YY_USE_PROTOS
  3292. static void yy_flex_free( void *ptr )
  3293. #else
  3294. static void yy_flex_free( ptr )
  3295. void *ptr;
  3296. #endif
  3297.     {
  3298.     free( ptr );
  3299.     }
  3300. # line 716 "../parser.l"
  3301.  
  3302.  
  3303.  
  3304. static char *StringToLex;
  3305.  
  3306. #ifndef FLEX_SCANNER
  3307. static FILE *lexFP;
  3308.  
  3309. static int input()
  3310. {
  3311.     int ret;
  3312.     
  3313.     if (StringToLex != NULL) {
  3314.     ret = *StringToLex;
  3315.     if (ret == NULLCHAR)
  3316.       ret = EOF;
  3317.     else
  3318.       StringToLex++;
  3319.     } else if (unputCount > 0) {
  3320.     ret = unputBuffer[--unputCount];
  3321.     } else {
  3322.     ret = fgetc(lexFP);
  3323.     }    
  3324.  
  3325.     if (ret == EOF) 
  3326.       return 0;
  3327.     else
  3328.       return ret;
  3329. }
  3330.  
  3331. /*
  3332.  * Return offset of next pattern within current file
  3333.  */
  3334. int yyoffset()
  3335. {
  3336.     int offset = ftell(lexFP) - unputCount;
  3337.  
  3338.     if (offset < 0) {
  3339.     offset = 0;
  3340.     }
  3341.     return(offset);
  3342. }
  3343.  
  3344. static void output(ch)
  3345.      int ch;
  3346. {
  3347.     fprintf(stderr, "PARSER BUG: unmatched character '%c' (0%o)\n",
  3348.         ch, ch);
  3349. }
  3350.  
  3351. static void unput(ch)
  3352.      int ch;
  3353. {
  3354.     if (ch == 0) return;
  3355.     if (StringToLex != NULL) {
  3356.     StringToLex--;
  3357.     } else {
  3358.     if (unputCount >= UNPUT_BUF_SIZE)
  3359.       fprintf(stderr, "PARSER BUG: unput buffer overflow '%c' (0%o)\n",
  3360.           ch, ch);
  3361.     unputBuffer[unputCount++] = ch;
  3362.     }
  3363. }
  3364.  
  3365. /* Get ready to lex from a new file.  Kludge below sticks
  3366.    an artificial newline at the front of the file, which the
  3367.    above grammar ignores, but which makes ^ at start of pattern
  3368.    match at the real start of the file.
  3369. */
  3370. void yynewfile(f)
  3371.      FILE *f;
  3372. {
  3373.     lexFP = f;
  3374.     StringToLex = NULL;
  3375.     unputCount = 0;
  3376.     unput('\n'); /* kludge */
  3377. }
  3378.  
  3379. /* Get ready to lex from a string.  ^ at start of pattern WON'T
  3380.    match at the start of the string!
  3381. */
  3382. void yynewstr(s)
  3383.      char *s;
  3384. {
  3385.     lexFP = NULL;
  3386.     StringToLex = s;
  3387.     unputCount = 0;
  3388. }
  3389. #endif /*!FLEX_SCANNER*/
  3390.  
  3391. #ifdef FLEX_SCANNER
  3392. void my_yy_input(buf, result, max_size)
  3393.      char *buf;
  3394.      int *result;
  3395.      int max_size;
  3396. {
  3397.     int count;
  3398.  
  3399.     if (StringToLex != NULL) {
  3400.     count = 0;
  3401.     while (*StringToLex != NULLCHAR) {
  3402.         *buf++ = *StringToLex++;
  3403.         count++;
  3404.     }
  3405.     *result = count;
  3406.     return;
  3407.     } else {
  3408.     count = fread(buf, 1, max_size, yyin);
  3409.     if (count == 0) {
  3410.         *result = YY_NULL;
  3411.     } else {
  3412.         *result = count;
  3413.     }
  3414.     return;
  3415.     }    
  3416. }
  3417.  
  3418. static YY_BUFFER_STATE my_file_buffer = NULL;
  3419.  
  3420. /*
  3421.     Return offset of next pattern in the current file.
  3422. */
  3423. int yyoffset()
  3424. {
  3425.     int pos = yy_c_buf_p - yy_current_buffer->yy_ch_buf;
  3426.  
  3427.     return(ftell(yy_current_buffer->yy_input_file) -
  3428.          yy_n_chars + pos);
  3429. }
  3430.  
  3431.  
  3432. void yynewstr(s)
  3433.      char *s;
  3434. {
  3435.     if (my_file_buffer != NULL)
  3436.       yy_delete_buffer(my_file_buffer);
  3437.     StringToLex = s;
  3438.     my_file_buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
  3439.     yy_switch_to_buffer(my_file_buffer);
  3440. }
  3441.  
  3442. void yynewfile(f)
  3443.      FILE *f;
  3444. {
  3445.     if (my_file_buffer != NULL)
  3446.       yy_delete_buffer(my_file_buffer);
  3447.     StringToLex = NULL;
  3448.     my_file_buffer = yy_create_buffer(f, YY_BUF_SIZE);
  3449.     yy_switch_to_buffer(my_file_buffer);
  3450. }
  3451. #endif /*FLEX_SCANNER*/
  3452.  
  3453. int yywrap()
  3454. {
  3455.     return TRUE;
  3456. }
  3457.  
  3458. /* Parse a move from the given string s */
  3459. /* ^ at start of pattern WON'T work here unless using flex */
  3460. ChessMove yylexstr(boardIndex, s)
  3461.      int boardIndex;
  3462.      char *s;
  3463. {
  3464.     ChessMove ret;
  3465.     char *oldStringToLex;
  3466. #ifdef FLEX_SCANNER
  3467.     YY_BUFFER_STATE buffer, oldBuffer;
  3468. #endif
  3469.     
  3470.     yyboardindex = boardIndex;
  3471.     oldStringToLex = StringToLex;
  3472.     StringToLex = s;
  3473. #ifdef FLEX_SCANNER
  3474.     buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
  3475.     oldBuffer = YY_CURRENT_BUFFER;
  3476.     yy_switch_to_buffer(buffer);
  3477. #endif /*FLEX_SCANNER*/
  3478.  
  3479.     ret = (ChessMove) yylex();
  3480.  
  3481. #ifdef FLEX_SCANNER
  3482.     if (oldBuffer != NULL) 
  3483.       yy_switch_to_buffer(oldBuffer);
  3484.     yy_delete_buffer(buffer);
  3485. #endif /*FLEX_SCANNER*/
  3486.     StringToLex = oldStringToLex;
  3487.  
  3488.     return ret;
  3489. }
  3490.